結果
問題 | No.708 (+ー)の式 |
ユーザー |
![]() |
提出日時 | 2019-02-05 20:46:13 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,148 bytes |
コンパイル時間 | 1,123 ms |
コンパイル使用メモリ | 110,176 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2025-01-03 00:07:41 |
合計ジャッジ時間 | 1,815 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 12 |
ソースコード
#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstdio>#include <vector>#include <string>#include <array>#include <queue>#include <deque>#include <set>#include <list>#include <map>#include <stack>#include <utility>#include <algorithm>#include <numeric>#include <cstdio>#include <cstdlib>#include <cmath>#include <cctype>#include <cstring>#include <climits>#include <bitset>#include <random>#include <functional>#include <sstream>#include <iomanip>using namespace std;#define rep(i, n) for(int i=0; i<(n); i++)#define FOR(i, m, n) for(int i=(m);i<(n);i++)#define sz(x) ((int)(x).size())#define all(x) (x).begin(),(x).end()#define SORT(x) sort((x).begin(),(x).end())#define REVE(x) reverse((x).begin(),(x).end())#define mp make_pair#define pb push_backtypedef vector<int> VI;typedef vector<string> VS;typedef vector<vector<int>> VVI;typedef pair<int, int> PII;typedef long long LL;int calc(string s) {VI num; string op;int i = 0;while (i < sz(s)) {if (isdigit(s[i])) {int x = 0;while (i < sz(s) && isdigit(s[i])) { x = x * 10 + (s[i] - '0'); i++; }num.pb(x);}else if (s[i] == '.') {i += 2;int x = 0;while (i < sz(s) && isdigit(s[i])) { x = x * 10 + (s[i] - '0'); i++; }num.pb(x*-1);}else {op += s[i];i++;}}//cout << "num:"; for (auto a : num)cout << a << " "; puts("");int re = num[0];rep(i, sz(op)) {if (op[i] == '+')re += num[i + 1];else if (op[i] == '-')re -= num[i + 1];}return re;}int main() {string s;cin >> s;VI k1, k2;rep(i, sz(s)) {if (s[i] == '(')k1.pb(i);else if (s[i] == ')')k2.pb(i);}VS num;rep(i, sz(k1)) {string sub = s.substr(k1[i] + 1, k2[i] - k1[i] - 1);string NUM = to_string(calc(sub));//cout << sub << " -> " << NUM << endl;if (calc(sub) < 0) {string Num = ".";Num += NUM;num.pb(Num);}else {num.pb(NUM);}}string ans;int ni = 0;rep(i, sz(s)) {if (s[i] == '(') {while (i < sz(s)) {if (s[i] == ')')break;i++;}ans += num[ni];ni++;}else {ans += s[i];}}cout << calc(ans) << endl;}