結果
問題 | No.193 筒の数式 |
ユーザー | dnish |
提出日時 | 2018-06-11 10:54:21 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 1,000 ms |
コード長 | 2,419 bytes |
コンパイル時間 | 741 ms |
コンパイル使用メモリ | 85,096 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-30 13:29:32 |
合計ジャッジ時間 | 1,600 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 16 |
ソースコード
#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <deque>#include <iostream>#include <map>#include <queue>#include <set>#include <stack>#include <string>#include <utility>#include <vector>#define p(s) cout<<(s)<<endl#define REP(i,n,N) for(int i=n;i<N;i++)#define RREP(i,n,N) for(int i=N-1;i>=n;i--)#define CK(n,a,b) ((a)<=(n)&&(n)<(b))#define F first#define S secondtypedef long long int ll;using namespace std;const ll inf=1e9+7;string s;typedef string::const_iterator State;typedef string::const_iterator State;long long expression(State &);long long term(State &);long long number(State &);long long factor(State &);// 四則演算の式をパースして、その評価結果を返す。long long expression(State &begin) {long long ret = term(begin);for (;;) {if (*begin == '+') {begin++;ret += term(begin);} else if (*begin == '-') {begin++;ret -= term(begin);} else {break;}}return ret;}// 乗算除算の式をパースして、その評価結果を返す。long long term(State &begin) {long long ret = factor(begin);for (;;) {if (*begin == '*') {begin++;ret *= factor(begin);} else if (*begin == '/') {begin++;ret /= factor(begin);} else {break;}}return ret;}// 括弧か数をパースして、その評価結果を返す。long long factor(State &begin) {if (*begin == '(') {begin++; // '('を飛ばす。long long ret = expression(begin);begin++; // ')'を飛ばす。return ret;} else {return number(begin);}}// 数字の列をパースして、その数を返す。long long number(State &begin) {long long ret = 0;while (isdigit(*begin)) {ret *= 10;ret += *begin - '0';begin++;}return ret;}int main(){cin>>s;ll ans = -inf;int N = s.size();REP(i,0,N){if(!isdigit(s[i])) continue;string a=s.substr(i,N-i);string b=s.substr(0,i);string ab=a+b;if(!isdigit(ab.front())||!isdigit(ab.back())) continue;State begin = ab.begin();ans = max(ans, expression(begin));}p(ans);return 0;}