結果
問題 | No.708 (+ー)の式 |
ユーザー |
![]() |
提出日時 | 2019-05-25 03:23:25 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,593 bytes |
コンパイル時間 | 1,416 ms |
コンパイル使用メモリ | 170,844 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-17 15:01:22 |
合計ジャッジ時間 | 1,997 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 12 |
ソースコード
// subtask_7.txt, subtask_10.txt で, WAとなったので, ロジック修正.// -> if(befX == '#') ans = c; を 追加.// -> (1-2)+(3-4) = -2 を計算できるようになった.#include <bits/stdc++.h>using namespace std;int main(){// 1. 入力情報取得.string S;cin >> S;// 2. 括弧ごとに計算.int ans = 0;vector<char> v;bool isBracket = false;char curX, befX = '#';for(int i = 0; i < S.size(); i++){curX = S[i];// 2-1. 左括弧来たら, フラグ を true に 変更.if(curX == '('){isBracket = true;continue;}// 2-2. 右括弧来たら, フラグ を false に 変更.if(curX == ')'){isBracket = false;int c = 0;char bef = '#';for(auto &cur : v){if(cur == '+' || cur == '-') bef = cur;if(cur != '+' && cur != '-'){if(bef == '#') c = (cur - '0');if(bef == '+') c += (cur - '0');if(bef == '-') c -= (cur - '0');}// cout << "cur=" << cur << " c=" << c << endl;}if(befX == '#') ans = c; // subtask_7.txt, subtask_10.txt での WA対策.if(befX == '+') ans += c;if(befX == '-') ans -= c;// cout << "isBracket=" << isBracket << " befX=" << befX << " curX=" << curX << " c=" << c << " ans=" << ans << endl;// v を 初期化.v = vector<char>();continue;}// 2-3. 括弧以外は, 保存 or 計算.if(isBracket) v.push_back(curX);if(!isBracket && curX != '+' && curX != '-'){if(befX == '#') ans = (curX - '0');if(befX == '+') ans += (curX - '0');if(befX == '-') ans -= (curX - '0');// cout << "isBracket=" << isBracket << " befX=" << befX << " curX=" << curX << " ans=" << ans << endl;}// 2-4. 前回 の '+' or '-' を 保存.if((curX == '+' || curX == '-') && !isBracket) befX = curX;}// 3. 出力 ~ 後処理.// ex.// 0-(1-2)+(3+4)-5+6-(7+8+9)+0+1+2+3+4+5 = 0// 5-(3-2+4)+(3-7-4+1)-5+6-0-(7+2+9)+5+0+1-2+3-4+(5+9)-3+7 = -3// のはず.//// (1-2)+(3-4) = -1 が出力されたことに注意(正解は, -2 の はず).// -> subtask_7.txt, subtask_10.txt での WA の 原因と推測されるもの.cout << ans << endl;return 0;}