4.1
闲话
做题纪要
luogu P1175 表达式的转换
-
开两个栈辅助建后缀表达式。
点击查看代码
char s[110]; deque<char>s1,s2; deque<int>s3; int val(char x) {if(x=='(') return 0;if(x=='+'||x=='-') return 1;if(x=='*'||x=='/') return 2;if(x=='^') return 3;return -1; } void work(char c) {int a=s3.back(); s3.pop_back();int b=s3.back(); s3.pop_back();if(c=='+') s3.push_back(b+a);if(c=='-') s3.push_back(b-a);if(c=='*') s3.push_back(b*a);if(c=='/') s3.push_back(b/a);if(c=='^') s3.push_back(pow(b,a)); } int main() { // #define Isaac #ifdef Isaacfreopen("in.in","r",stdin);freopen("out.out","w",stdout); #endifint n,i;char c;cin>>(s+1); n=strlen(s+1);for(i=1;i<=n;i++){if('0'<=s[i]&&s[i]<='9') s1.push_back(s[i]);else if(s[i]=='(') s2.push_back(s[i]);else if(s[i]==')'){while(s2.back()!='('){s1.push_back(s2.back());s2.pop_back();}s2.pop_back();}else{if(s2.empty()==0){while(s2.empty()==0&&val(s2.back())>=val(s[i])&&(s2.back()!='^'||s[i]!='^')){s1.push_back(s2.back());s2.pop_back();}}s2.push_back(s[i]);}}while(s2.empty()==0){s1.push_back(s2.back());s2.pop_back();}for(i=0;i<s1.size();i++) cout<<s1[i]<<" ";cout<<endl;while(s1.empty()==0){c=s1.front(); s1.pop_front();if('0'<=c&&c<='9') s3.push_back(c-'0');else {work(c);for(i=0;i<s3.size();i++) cout<<s3[i]<<" ";for(i=0;i<s1.size();i++) cout<<s1[i]<<" ";cout<<endl;}}return 0; }
P898. 交通网络
- 详见 来自aakennes的新年祝福 K P898. 交通网络 。
P1007. 小 F 的疑惑
- 原题: TopCoder 12584 SemiPerfectPower