結果

問題 No.193 筒の数式
ユーザー IJMP320IJMP320
提出日時 2015-04-26 23:37:30
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 1,000 ms
コード長 1,384 bytes
コンパイル時間 1,561 ms
コンパイル使用メモリ 168,804 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-07-05 02:46:13
合計ジャッジ時間 2,333 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 16
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define FOR(i,a,n) for(int i=a;i<(int)(n);i++)
#define REP(i,n) FOR(i,0,n)
#define ALL(a) (a).begin(),(a).end()
#define MP(a,b) make_pair(a,b)
#define PB(a) push_back(a)
#define F first
#define S second
const int INF = 2000000000;
const int DX[4]={0,1,0,-1}, DY[4]={-1,0,1,0};
struct P{int x;int y;P(int X=0,int Y=0){x=X;y=Y;}};

int main() {
	string S;
	cin >> S;
	int len = S.size();
	ll ans = -INF;
	REP(i,len) {
		if(S[0]=='+' || S[0]=='-' || S[len-1]=='+' || S[len-1]=='-') {
			char a = S[0];
			REP(i,len-1) {
				S[i] = S[i+1];
			}
			S[len-1] = a;
			continue;
		}

		string tmp;
		queue<int> num;
		queue<char> en;
		REP(j,len) {
			if(S[j]=='+') {
				int n = atoi(tmp.c_str());
				num.push(n);
				tmp="";
				en.push('+');
			}
			else if(S[j]=='-') {
				int n = atoi(tmp.c_str());
				num.push(n);
				tmp="";
				en.push('-');
			}
			else {
				tmp += S[j];
			}
		}
		int n = atoi(tmp.c_str());
		num.push(n);

		ll t=num.front(); num.pop();
		while(true) {
			ll b = num.front(); num.pop();
			char c = en.front(); en.pop();
			if(c=='+') t += b;
			else if(c=='-') t -= b;

			if(num.empty()) break;
		}
		ans = max(ans, t);

		char a = S[0];
		REP(i,len-1) {
			S[i] = S[i+1];
		}
		S[len-1] = a;
	}
	cout << ans << endl;
	return 0;
}
0