結果
| 問題 |
No.708 (+ー)の式
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-12-20 01:26:04 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,735 bytes |
| コンパイル時間 | 880 ms |
| コンパイル使用メモリ | 71,564 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-25 08:19:21 |
| 合計ジャッジ時間 | 1,380 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 WA * 5 |
ソースコード
#include<iostream>
#include<string>
#include<deque>
using namespace std;
bool IsNum(char c) {
if ('0' <= c && c <= '9') return true;
else return false;
}
bool IsAdd(char c) {
if (c=='+')return true;
else return false;
}
bool IsSub(char c) {
if (c=='-')return true;
else return false;
}
int ctoi(char c) {
if ('0' <= c && c <= '9') return (c - '0');
return -1;
}
int pop(deque<int> &st) {
int buff = st.front();
st.pop_front();
return buff;
}
void add(deque<int> &st,bool &flag) {
int buff1 = pop(st);
int buff2 = pop(st);
int addAns = buff2 + buff1;
st.push_front(addAns);
flag = false;
}
void sub(deque<int> &st,bool &flag) {
int buff1 = pop(st);
int buff2 = pop(st);
int subAns = buff2 - buff1;
st.push_front(subAns);
flag = false;
}
int main() {
bool addFlag = false, subFlag = false;
bool addFlag2 = false, subFlag2 = false;
bool pareStartFlag = false;
string str;
deque<int> stack;
cin >> str;
for (int i = 0;i < str.size();i++) {
char c = str[i];
if (IsNum(c)) {
stack.push_front(ctoi(c));
if (!pareStartFlag) {
if (addFlag) add(stack,addFlag);
else if (subFlag) sub(stack,subFlag);
}
else {
if (addFlag2) {
add(stack,addFlag2);
if (addFlag) add(stack,addFlag);
else if (subFlag) sub(stack,subFlag);
}
else if (subFlag2) {
sub(stack,subFlag2);
if (addFlag) add(stack,addFlag);
else if (subFlag) sub(stack, subFlag);
}
}
}
else if (pareStartFlag) {
if (IsAdd(c)) addFlag2 = true;
else if (IsSub(c))subFlag2 = true;
}
else if (IsAdd(c))addFlag=true;
else if (IsSub(c))subFlag = true;
else if ('(')pareStartFlag = true;
else if (')')pareStartFlag = false;
}
cout << stack.front() << endl;
return 0;
}