結果
問題 | No.1135 RPN |
ユーザー | ciel |
提出日時 | 2021-05-12 02:17:35 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,815 bytes |
コンパイル時間 | 919 ms |
コンパイル使用メモリ | 84,068 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-22 08:25:24 |
合計ジャッジ時間 | 1,578 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 3 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 2 ms
6,940 KB |
testcase_05 | AC | 2 ms
6,940 KB |
testcase_06 | AC | 2 ms
6,940 KB |
testcase_07 | AC | 2 ms
6,940 KB |
testcase_08 | AC | 2 ms
6,940 KB |
testcase_09 | AC | 2 ms
6,940 KB |
testcase_10 | AC | 2 ms
6,944 KB |
testcase_11 | AC | 2 ms
6,944 KB |
testcase_12 | AC | 2 ms
6,944 KB |
testcase_13 | AC | 2 ms
6,940 KB |
testcase_14 | AC | 2 ms
6,944 KB |
testcase_15 | AC | 2 ms
6,944 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 2 ms
6,944 KB |
testcase_18 | AC | 2 ms
6,944 KB |
ソースコード
#include <vector> #include <string> #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; vector<string> split(string &str, const char *delim){ vector<string> result; int cutAt; while( (cutAt = str.find_first_of(delim)) != str.npos ){ if(cutAt > 0){ result.push_back(str.substr(0, cutAt)); } str = str.substr(cutAt + 1); } if(str.length() > 0){ result.push_back(str); } return result; } void reversepoland(string &exp){ vector<string> token = split(exp," "); vector<double> resolveNumber; vector<string> resolveString; for(int i=0;i<token.size();i++){ char *p=NULL; double d=strtod(token[i].c_str(),&p); if(p-token[i].c_str()==token[i].size()){ resolveNumber.push_back(d); resolveString.push_back(token[i]); }else{ //if(resolveNumber.size()<2){printf("stack few\n");return;} double d2=resolveNumber[resolveNumber.size()-1],d1=resolveNumber[resolveNumber.size()-2]; resolveNumber.pop_back(),resolveNumber.pop_back(); string s2=resolveString[resolveString.size()-1],s1=resolveString[resolveString.size()-2]; resolveString.pop_back(),resolveString.pop_back(); double ret; if(token[i]=="+"){ret=d1+d2;} else if(token[i]=="-"){ret=d1-d2;} else if(token[i]=="*"){ret=d1*d2;} else if(token[i]=="/"){ret=d1/d2;} //else if(token[i]=="%"){ret=d1%d2;} //else if(token[i]=="**"){ret=pow(d1,d2);} //else{printf("unknown OP %s\n",token[i].c_str());return;} resolveNumber.push_back(ret); resolveString.push_back("("+s1+token[i]+s2+")"); //this won't emit "optimized" expression. full of parens. } } //if(resolveNumber.size()!=1){printf("result stack not 1");return;} printf("%.0f\n",resolveNumber[0]); //puts(resolveString[0].c_str()); } int main(){string str;getline(cin,str);getline(cin,str);reversepoland(str);}