結果
問題 | No.193 筒の数式 |
ユーザー | tkmst201 |
提出日時 | 2017-04-27 22:56:45 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 1,000 ms |
コード長 | 1,719 bytes |
コンパイル時間 | 1,320 ms |
コンパイル使用メモリ | 162,036 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-13 14:54:58 |
合計ジャッジ時間 | 2,005 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 16 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define FOR(i,a,b) for(int i=(a);i<(b);i++)#define REP(i,n) FOR(i,0,n)#define ALL(v) (v).begin(),(v).end()template<typename A, typename B> inline bool chmax(A &a, B b) { if (a<b) { a=b; return 1; } return 0; }template<typename A, typename B> inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; }typedef unsigned long long ull;typedef long long ll;typedef pair<int, int> pii;typedef pair<ll, ll> pll;typedef pair<int, pii> P;const ll INF = 1ll<<60;const ll MOD = 1000000007;const double EPS = 1e-10;struct SyntaxAnalysis {string s;int i;ll val;SyntaxAnalysis(string s) { init(s); }void init(string _s) {s = _s;i = 0;val = expr(i);}ll expr(int &i) {ll res = term(i);while (s[i] == '+' || s[i] == '-') {char op = s[i++];ll now = term(i);if (op == '+') res += now;else res -= now;}return res;}ll term(int &i) {ll res = factor(i);while (s[i] == '*' || s[i] == '/') {char op = s[i++];ll now = factor(i);if (op == '*') res *= now;else res /= now;}return res;}ll factor(int &i) {if (isdigit(s[i])) return number(i);i++;ll res = expr(i);i++;return res;}ll number(int &i) {ll res = s[i++] - '0';while (isdigit(s[i])) res = res * 10 + s[i++] - '0';return res;}ll get() {return val;}};int main() {string s;cin >> s;ll ans = -INF;REP(i, s.size()) {rotate(s.begin(), s.begin() + 1, s.end());if (s[0] == '+' || s[0] == '-' || s[s.size() - 1] == '+' || s[s.size() - 1] == '-') continue;SyntaxAnalysis sa(s);chmax(ans, sa.get());}cout << ans << endl;return 0;}