結果
問題 | No.708 (+ー)の式 |
ユーザー |
|
提出日時 | 2020-05-05 11:27:11 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,167 bytes |
コンパイル時間 | 1,826 ms |
コンパイル使用メモリ | 170,344 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-26 05:09:16 |
合計ジャッジ時間 | 2,812 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 12 |
ソースコード
#include <bits/stdc++.h>#include <string>#define ft first#define sc second#define pt(sth) cout << sth << "\n"#define chmax(a, b) (a)=max(a, b)#define chmin(a, b) (a)=min(a, b)#define moC(a, s, b) (a)=((a)s(b)+MOD)%MODusing namespace std;typedef long long ll;typedef pair<ll, ll> pll;static const ll INF=1e18;static const ll MAX=101010;static const ll MOD=1e9+7;/*for(i=0; i<N; i++)cin >> a[i];*/map<ll, ll> mp;ll rec(string s) {if(s.size()==3) {ll a=s[0]-'0';ll b=s[2]-'0';if(s[1]=='+') return a+b;else return a-b;}ll res=0;ll r=0;for(ll i=0; i<s.size(); i++) {if(s[i]=='+') r=0;else if(s[i]=='-') r=1;else if(s[i]=='(') {if(r==0) res+=rec(s.substr(i+1, mp[i]-i-1));else res-=rec(s.substr(i+1, mp[i]-i-1));i=mp[i];}else {if(r==0) res+=s[i]-'0';else res-=s[i]-'0';}}return res;}int main() {ll i, j, k;string S;cin >> S;stack<ll> st;for(i=0; i<S.size(); i++) {if(S[i]=='(') {st.push(i);}else if(S[i]==')') {ll u=st.top(); st.pop();mp[u]=i;}}pt(rec(S));}