#include<bits/stdc++.h>
#define MP make_pair
#define PII pair<ll,ll>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f;
string str;
string trans;
ll ans[1005];
stack<char>st;
stack<PII>stk;
map<char,ll>mp;
void init(){
mp['^']=3;
mp['*']=mp['/']=2;
mp['+']=mp['-']=1;
mp['(']=mp[')']=0;
}
void print(){
for(ll i=1;i<=trans.length();i++){
if(ans[i]==-6)continue;
else if(ans[i]==-1)putchar('+');
else if(ans[i]==-2)putchar('-');
else if(ans[i]==-3)putchar('*');
else if(ans[i]==-4)putchar('/');
else if(ans[i]==-5)putchar('^');
else printf("%lld",ans[i]);
if(i!=trans.length())putchar(' ');
}
putchar('\n');
}
int main(){
init();
getline(cin,str);
for(ll i=0;i<str.length();i++){
if(str[i]>='0'&&str[i]<='9')trans+=str[i];
else if(str[i]=='(')st.push('(');
else if(str[i]==')'){
if(!st.empty()){
while(st.top()!='('){
trans+=st.top();
st.pop();
if(st.empty())break;
}
st.pop();
}
}else if(str[i]=='^')st.push('^');
else{
if(!st.empty()){
while(mp[st.top()]>=mp[str[i]]){
trans+=st.top();
st.pop();
if(st.empty())break;
}
}
st.push(str[i]);
}
}
while(!st.empty())trans+=st.top(),st.pop();
// cout<<trans<<endl;
for(ll i=0;i<trans.size();i++){
if(trans[i]>='0'&&trans[i]<='9')ans[i+1]=trans[i]-'0';
else if(trans[i]=='+')ans[i+1]=-1;
else if(trans[i]=='-')ans[i+1]=-2;
else if(trans[i]=='*')ans[i+1]=-3;
else if(trans[i]=='/')ans[i+1]=-4;
else if(trans[i]=='^')ans[i+1]=-5;
}
print();
for(ll i=1;i<=trans.length();i++){
if(ans[i]>=0)stk.push(MP(ans[i],i));
else{
ll t1=stk.top().first,t3=stk.top().second;
stk.pop();
ll t2=stk.top().first,t4=stk.top().second;
stk.pop();
ans[t3]=ans[t4]=-6;
if(ans[i]==-1)ans[i]=t1+t2;
else if(ans[i]==-2)ans[i]=t2-t1;
else if(ans[i]==-3)ans[i]=t2*t1;
else if(ans[i]==-4)ans[i]=t2/t1;
else if(ans[i]==-5){
ans[i]=1;
for(ll j=1;j<=t1;j++)ans[i]*=t2;
}
stk.push(MP(ans[i],i));
print();
}
}
return 0;
}
提交这个代码,第二个子任务对了
但是第一个子任务的所有测试点均WA+错误“too long on line 1”
求助路过的大佬