去年省赛的一道题。。。有两个知识点值得注意:一个就是数字的入栈,一个就是特殊的测试数据,,
#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;
}