死于不明RE。。求助
查看原帖
死于不明RE。。求助
356454
TangWK楼主2021/9/28 19:13
#include<cstdio>
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
char s1[2000],s2[2000];
void check(char s[],int &x,int &y) {
	//printf("!%s!\n",s+1);
	if(s[2]>='0'&&s[2]<='9') {//常数级 
		int i=0,f=0;
		while(!isdigit(s[i]))
			++i;
		while(isdigit(s[i])) {
			f=(f<<1)+(f<<3)+(s[i]^48);
			++i;
		}
		y=0;x=f;
		return;
	}
	int i=1,f=0;
	while(!isdigit(s[i]))
		++i;
	while(isdigit(s[i])) {
		f=(f<<1)+(f<<3)+(s[i]^48);
		++i;
	}
	y=1;x=f;
}
void r(char s[],int &f) {
	int i=0;
	f=0;
	bool p1=0;
	while(!isdigit(s[i])) {
		if(s[i]=='n')
			f=101,p1=1;
		++i;
	}
	while(isdigit(s[i])&&p1==0) {
		f=(f<<1)+(f<<3)+(s[i]^48);
		++i;
	}
	return;
}
int use[30]={0},end[30]={0};
char pft[10],pf;
stack<int> s0;
int main() {
	int n,len,t,i;
	scanf("%d",&t);
	int ans,log;
	int ti,p,fr,to;
	while(t--) {
		memset(use,0,sizeof(use));
		scanf("%d",&len);
		scanf("%s",s1+1);
		//printf("!%s!",s+1);
		bool flag=0;
		ans=1,log=0;
		check(s1+1,ti,p);
		//printf("%d\n",len);
		for(i=1;i<=len;++i) {
			scanf("%s",&pft);
			for(int j=0;j<=strlen(pft);++j) {
				if(pft[j]=='E'||pft[j]=='F') {
					pf=pft[j];
					break;
				}
			}
			//printf("!%c!\n",pf);
			if(pf=='E') {//退出循环 
			//printf(">\n");
				if(s0.empty()==1) {
					//printf("<\n");
					flag=1;
				}
				else {
					s0.pop();
					--use[i];
				}
			//printf("<>%d\n",s0.empty());
			}
			
			else {//循环 
				char var[10],va;
				scanf("%s",var);
				for(int j=0;j<=strlen(var+1);++j)
					if(var[j]>='a'&&var[j]<='z') {
						va=var[j];
						break;
					}
				//printf("!%c!\n",va);,printf("???\n")
				scanf("%s",s2+1);
				//printf("!%s!\n",s2+1);
				r(s2+1,fr);
				scanf("%s",s2+1);
				//printf("!%s!\n",s2+1);
				r(s2+1,to);
				int puse=va-'a'+1;
				if(use[puse]) {
					flag=1;
				}
				++use[puse];
				//printf("%d %d\n",fr,to);
				if(fr!=101&&to!=101) {
					if(fr<=to)
						ans*=(to-fr+1);
				}
				else {
					if(fr!=101&&(log==0||(!s0.empty()))) {
						++log;
					}
				}
				s0.push(puse); 
			}
		}
		//printf("p=%d ans=%d log=%d ti=%d\n",p,ans,log,ti);
		if(s0.empty()==0)
			flag=1;
		while(!s0.empty()) 
			s0.pop();
		//puts("");
		if(flag)//运行错误 
			printf("ERR\n");
		else {
			if((p==0&&ans==ti)||(p==1&&log==ti))//时间复杂度正确 
				printf("Yes\n");
			else//时间复杂度错误 
				printf("No\n");
		}
		//puts("");
	}
	return 0;
}
2021/9/28 19:13
加载中...