记录编号 476719 评测结果 AAAAAAAAAA
题目名称 [NOIP 2017]时间复杂度 最终得分 100
用户昵称 Gravatarrvalue 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2017-11-26 19:14:13 内存使用 0.32 MiB
显示代码纯文本
#include <stack>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

bool vis[128];

int Parse(char*);

int main(){
	freopen("2017complexity.in","r",stdin);
	freopen("2017complexity.out","w",stdout);
	int T,l;
	int cpt,inc,dis;
	int toc;
	bool invalid;
	char a[10],b[10],c[10],o[10];
	scanf("%d",&T);
	while(T--){
		inc=0;
		cpt=0;
		dis=0;
		invalid=false;
		memset(vis,0,sizeof(vis));
		std::stack< std::pair<char,int> > s;
		scanf("%d%s",&l,o);
		toc=Parse(o);
		for(int i=0;i<l;i++){
			scanf("%s",a);
			if(*a=='E'){
				if(s.empty()){
					invalid=true;
				}
				else{
					vis[s.top().first]=false;
					if(s.top().second==0)
						--dis;
					else if(dis<=0&&s.top().second==-1)
						--inc;
					s.pop();
				}
			}
			else if(*a=='F'){
				scanf("%s%s%s",a,b,c);
				if(vis[*a]){
					invalid=true;
				}
				else{
					vis[*a]=true;
					if(*b=='n'){
						if(*c=='n')
							s.push(std::make_pair(*a,1));
						else{
							s.push(std::make_pair(*a,0));
							++dis;
						}
					}
					else{
						if(*c=='n'){
							s.push(std::make_pair(*a,-1));
							if(dis<=0){
								++inc;
								cpt=std::max(inc,cpt);
							}
						}
						else{
							int bc,cc;
							sscanf(b,"%d",&bc);
							sscanf(c,"%d",&cc);
							if(bc>cc){
								s.push(std::make_pair(*a,0));
								++dis;
							}
							else
								s.push(std::make_pair(*a,1));
						}
					}
				}
			}
		}
		if(!s.empty()){
			invalid=true;
		}
		if(invalid)
			puts("ERR");
		else if(toc==cpt)
			puts("Yes");
		else
			puts("No");
	}
	return 0;
}

int Parse(char* buf){
	if(buf[2]=='1')
		return 0;
	else{
		int ans=0;
		for(int i=4;buf[i]!=')';i++)
			ans=ans*10+buf[i]-'0';
		return ans;
	}
}