记录编号 |
584473 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2017]时间复杂度 |
最终得分 |
100 |
用户昵称 |
┭┮﹏┭┮ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2023-11-13 14:03:22 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,char> P;
#define mk(x,y) make_pair(x,y)
int t,n,s;
stack<P>st;
char a[10];
int v[510];
int fin(char c[10]){
int l = strlen(c),ans = 0;
for(int i = 0;i < l;i++){
ans = ans * 10 + c[i] - '0';
}
return ans;
}
int main(){
freopen("2017complexity.in","r",stdin);
freopen("2017complexity.out","w",stdout);
scanf("%d",&t);
while(t--){
while(!st.empty())st.pop();
memset(v,0,sizeof(v));
bool f = 0;s = 0;
scanf("%d%s",&n,a);
// cout<<a<<endl;
for(int i = 1;i <= n;i++){
char op[2];scanf("%s",op);
if(op[0] == 'F'){
char x[2],y[10],z[10];scanf("%s%s%s",x,y,z);
if(v[x[0]]){f = 1;continue;}
v[x[0]]++;
if(!st.empty() && st.top().first == -1){
st.push(mk(-1,x[0]));
}
else if(y[0] == 'n' && z[0] != 'n'){
st.push(mk(-1,x[0]));
}
else if(y[0] != 'n' && z[0] == 'n'){
if(!st.empty())s = max(s,st.top().first+1),st.push(mk(st.top().first+1,x[0]));
else s = max(s,1),st.push(mk(1,x[0]));
}
else if(y[0] != 'n' && z[0] != 'n' && fin(y) > fin(z)){
st.push(mk(-1,x[0]));
}
else{
if(!st.empty())s = max(s,st.top().first),st.push(mk(st.top().first,x[0]));
else s = max(s,0),st.push(mk(0,x[0]));
}
}
else{
if(st.empty())f = 1;
else v[st.top().second] = 0,st.pop();
}
}
if(!st.empty())f = 1;
int l = strlen(a),f1 = 0,u = 0;
for(int i = 0;i < l;i++){
if(a[i] == 'O' || a[i] == '(' || a[i] == ')')continue;
if(a[i] == 'n' || a[i] == '^'){f1 = 1;continue;}
u = u * 10 + a[i] - '0';
}
if(!f1)u = 0;
if(f == 1)printf("ERR\n");
else if(u == s)printf("Yes\n");
else printf("No\n");
}
return 0;
}