救救孩子!已经疯了。
查看原帖
救救孩子!已经疯了。
353112
WTR2007楼主2021/9/9 22:42

全部TLE(真的很玄学)。

#include<bits/stdc++.h>
using namespace std;
char yuan[60],hou[30][60];
char b[30][60],s[60];
bool vis[30];
void zhongtohou(char a[],int v){
	int i=0,j=-1,t=0;
	while(a[i]!='@'){
		if(a[i]=='a'){
			b[v][++j]=a[i];
			b[v][++j]='.';
			i++;
		}
		if(a[i]>='0' && a[i]<='9'){
			while(a[i]>='0' && a[i]<='9'){
				b[v][++j]=a[i];
				i++;
			}
			b[v][++j]='.';
		}
		if(a[i]=='('){
			s[++t]=a[i];
			i++;
		}
		if(a[i]=='+'||a[i]=='-'){
			if(t>0){
				while(s[t]!='(' && t>0){
					b[v][++j]=s[t];
					t--;
				}
			}
			s[++t]=a[i];
			i++;
		}
		if(a[i]=='*'||a[i]=='/'){
			if(t>0){
				while((s[t]=='*'||s[t]=='/'||s[t]=='^')&& t>0){
					b[v][++j]=s[t];
					t--;
				}
			}
			s[++t]=a[i];
			i++;
		}
		if(a[i]=='^'){
			s[++t]=a[i];
			i++;
		}
		if(a[i]==')'){
			while(s[t]!='(' && t>0){
				b[v][++j]=s[t];
				t--;
			}
			if(t>0) t--;
			i++;
		}
	}
	while(t>0){
		b[v][++j]=s[t];
		t--;
	}
}
int jisuan(int u,int adz){
	char a[100];
	int i=0,j=0;
	strcat(b[u],"@");
	while(b[u][i]!='@'){
		if(b[u][i]=='a'){
			a[++j]=adz;
			i+=2;
		}
		if(b[u][i]>='0' && b[u][i]<='9'){
			int w=0;
			while(b[u][i]>='0' && b[u][i]<='9'){
				w=(w<<1)+(w<<3)+b[u][i]-'0';
				i++;
			}
			i++;
			a[++j]=w;
		}
		while(b[u][i]=='*'||b[u][i]=='/'||b[u][i]=='+'||b[u][i]=='-'||b[u][i]=='^'){
			j--;
			if(b[u][i]=='+') a[j]+=a[j+1];
			else if(b[u][i]=='*') a[j]*=a[j+1];
			else if(b[u][i]=='-') a[j]-=a[j+1];
			else if(b[u][i]=='/') a[j]/=a[j+1];
			else{
				for(int e=1;e<a[j+1];e++){
					a[j]*=a[j];
				}
			}
			i++;
		}
	}
	return a[1];
}
void read(char x[]){
	int cnt=-1;
	string tmp;
	getline(cin,tmp);
	for(int i=0;i<tmp.size();i++){
		if(tmp[i]==' ') continue;
		else x[++cnt]=tmp[i];
	}
	strcat(x,"@");
}
int main(){
	int n;
	read(yuan);
	zhongtohou(yuan,0);
	scanf("%d\n",&n);
	for(int i=1;i<=n;i++){
		read(hou[i]);
		zhongtohou(hou[i],i);
	}
	for(int j=-3;j<=3;j++){
		int z=jisuan(0,j);
		for(int i=1;i<=n;i++){
			if(!vis[i]){
				int k=jisuan(i,j);
				if(k!=z) vis[i]=1;
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]) cout<<char(i-1+'A');
	}
	return 0;
}
2021/9/9 22:42
加载中...