我的代码:
#include<bits/stdc++.h>
using namespace std;
char op[111][11][11];
char s[222];
set<string> v;
set<char> vis;
int t,m,ans;
vector<int> son[111];
int dfs(int u){
int comp=0;
if(vis.count(op[u][1][0])) return -1;
vis.insert(op[u][1][0]);
for(auto v:son[u]){
int comp2=dfs(v);
if(comp2==-1) return -1;
comp=max(comp,comp2);
}
if(op[u][2][0]=='n'&&op[u][3][0]=='n'){
;
}else if(op[u][2][0]=='n') comp=0;
else if(op[u][3][0]=='n') comp+=1;
else{
int l,r;
sscanf(op[u][2],"%d",&l);
sscanf(op[u][3],"%d",&r);
if(l>r) comp=0;
}
vis.erase(op[u][1][0]);
return comp;
}
void solve(){
cin>>m>>s;
v.clear();
for(int i=0;i<m;i++){
cin>>op[i][0];
if(op[i][0][0]=='F') cin>>op[i][1]>>op[i][2]>>op[i][3];
son[i].clear();
}
son[m].clear();
stack<int> g;
g.push(m);
for(int i=0;i<m;i++){
if(op[i][0][0]=='F') son[g.top()].push_back(i),g.push(i);
else {
if(g.top()==m) {
cout<<"ERR\n";
return;
}
g.pop();
}
}
if(g.top()!=m){
cout<<"ERR\n";
return;
}
op[m][1][0]='-';
int res=dfs(m),ans=0;
if(s[2]=='n') sscanf(s,"O(n^%d)",&ans);
if(res==-1) cout<<"ERR\n";
else if(ans==res) cout<<"Yes\n";
else cout<<"No\n";
}
int main(){
cin>>t;
while(t--) solve();
return 0;
}
调了很久一直91pts,WA #10,跪求各位dalao调我的代码,thx!
回复时请@本蒟蒻,感谢!