http://acm.nyist.net/JudgeOnline/problem.php?pid=305

来源:互联网 发布:驱动人生mac版下载 编辑:程序博客网 时间:2024/04/23 22:52

去年省赛的一道题。。。有两个知识点值得注意:一个就是数字的入栈,一个就是特殊的测试数据,,

 #include<string.h>#include<string>#include<stack>#include<algorithm>#include<stdlib.h>#include<iostream>using namespace std;stack<int>shu;stack<char>fu;string s;int cal(char ch,int x,int y){if(ch=='d') return (x+y);else if(ch=='n')  return min(x,y);else if(ch=='x')  return max(x,y);}void doit(){int second=shu.top();  shu.pop();  int first=shu.top();  shu.pop();  char ch=fu.top();   fu.pop();  int result=cal(ch,first,second);  shu.push(result);}void solve(){string s1="";bool flag(false);for(int i=0;i<s.size();++i){  if(isdigit(s[i])) flag=true;   else  flag=false;   if(flag) s1+=s[i];   else   {     if(s1!="")       {   int k=atoi(s1.data());    shu.push(k);   }   s1="";   if((s[i]=='d'&&s[i+1]=='d')||s[i]=='x'||s[i]=='n'||s[i]=='(')  fu.push(s[i]);   if(s[i]==')')  {fu.pop(); doit();}}}if(!s1.empty()){ cout<<s1<<endl;  return;}cout<<shu.top()<<endl;shu.pop();}int main(){  int T;    cin>>T;while(T--){cin>>s;solve();}return 0;}        


原创粉丝点击