求助!!本地AC提交全RE
查看原帖
求助!!本地AC提交全RE
428358
Grisses楼主2022/7/29 14:36
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7,A=998244353;
int n,len,ans,cnt;
char s[55];
stack<int>sa;
stack<char>sc;
void get(char *s){
	char c=getchar();
	int tot=0;
	while(c!='\n'&&c!='\r'){
		*(s+tot)=c;
		tot++;
		c=getchar();
	}
	*(s+tot)='\0';
}
int fpow(int a,int b){
	int res=1;
	while(b){
		if(b&1)res=res*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return res;
}
signed main()
{
	get(s+1);
	len=strlen(s+1);
	for(int i=1;i<=len;){
		while(i<=len&&s[i]==' ')i++;
		if(i>len)break;
		if(s[i]=='(')sc.push('('),i++;
		else if(s[i]=='+'||s[i]=='-'){
			while(!sc.empty()&&(sc.top()=='+'||sc.top()=='-'||sc.top()=='*'||sc.top()=='^')){
				int a=sa.top();
				sa.pop();
				int b=sa.top();
				sa.pop();
				if(sc.top()=='+')sa.push((a+b)%mod);
				else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
				else if(sc.top()=='*')sa.push(a*b%mod);
				else sa.push(fpow(b,a));
				sc.pop(); 
			}
			sc.push(s[i]);
			i++;
		}
		else if(s[i]=='*'){
			while(!sc.empty()&&(sc.top()=='*'||sc.top()=='^')){
				int a=sa.top();
				sa.pop();
				int b=sa.top();
				sa.pop();
				if(sc.top()=='+')sa.push((a+b)%mod);
				else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
				else if(sc.top()=='*')sa.push(a*b%mod);
				else sa.push(fpow(b,a));
				sc.pop();
			}
			sc.push(s[i]);
			i++;
		}
		else if(s[i]=='^'){
			while(!sc.empty()&&(sc.top()=='^')){
				int a=sa.top();
				sa.pop();
				int b=sa.top();
				sa.pop();
				if(sc.top()=='+')sa.push((a+b)%mod);
				else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
				else if(sc.top()=='*')sa.push(a*b%mod);
				else sa.push(fpow(b,a));
				sc.pop();
			}
			sc.push(s[i]);
			i++;
		}
		else if(s[i]=='a')sa.push(A),i++;
		else if(s[i]==')'){
			while(sc.top()!='('){
				int a=sa.top();
				sa.pop();
				int b=sa.top();
				sa.pop();
				if(sc.top()=='+')sa.push((a+b)%mod);
				else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
				else if(sc.top()=='*')sa.push(a*b%mod);
				else sa.push(fpow(b,a));
				sc.pop();
			}
			sc.pop();
			i++;
		}
		else{
			int x=0;
			while(s[i]>='0'&&s[i]<='9')x=(x<<1)+(x<<3)+(s[i]^'0'),i++;
			sa.push(x);
		}
	}
	while(!sc.empty()){
		int a=sa.top();
		sa.pop();
		int b=sa.top();
		sa.pop();
		if(sc.top()=='+')sa.push((a+b)%mod);
		else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
		else if(sc.top()=='*')sa.push(a*b%mod);
		else sa.push(fpow(b,a));
		sc.pop();
	}
	ans=sa.top();
	scanf("%lld\n",&n);
	for(int i=1;i<=n;i++){
		get(s+1); 
		len=strlen(s+1);
		while(!sa.empty())sa.pop();
		while(!sc.empty())sc.pop();
		int Y=0;
		for(int i=1;i<=len;){
			while(i<=len&&s[i]==' ')i++;
			if(i>len)break;
			if(s[i]=='(')sc.push('('),i++,Y++;
			else if(s[i]=='+'||s[i]=='-'){
				while(!sc.empty()&&(sc.top()=='+'||sc.top()=='-'||sc.top()=='*'||sc.top()=='^')){
					int a=sa.top();
					sa.pop();
					int b=sa.top();
					sa.pop();
					if(sc.top()=='+')sa.push((a+b)%mod);
					else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
					else if(sc.top()=='*')sa.push(a*b%mod);
					else sa.push(fpow(b,a));
					sc.pop(); 
				}
				sc.push(s[i]);
				i++;
			}
			else if(s[i]=='*'){
				while(!sc.empty()&&(sc.top()=='*'||sc.top()=='^')){
					int a=sa.top();
					sa.pop();
					int b=sa.top();
					sa.pop();
					if(sc.top()=='+')sa.push((a+b)%mod);
					else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
					else if(sc.top()=='*')sa.push(a*b%mod);
					else sa.push(fpow(b,a));
					sc.pop();
				}
				sc.push(s[i]);
				i++;
			}
			else if(s[i]=='^'){
				while(!sc.empty()&&(sc.top()=='^')){
					int a=sa.top();
					sa.pop();
					int b=sa.top();
					sa.pop();
					if(sc.top()=='+')sa.push((a+b)%mod);
					else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
					else if(sc.top()=='*')sa.push(a*b%mod);
					else sa.push(fpow(b,a));
					sc.pop();
				}
				sc.push(s[i]);
				i++;
			}
			else if(s[i]=='a')sa.push(A),i++;
			else if(s[i]==')'){
				if(!Y)goto a;
				while(sc.top()!='('){
					int a=sa.top();
					sa.pop();
					int b=sa.top();
					sa.pop();
					if(sc.top()=='+')sa.push((a+b)%mod);
					else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
					else if(sc.top()=='*')sa.push(a*b%mod);
					else sa.push(fpow(b,a));
					sc.pop();
				}
				sc.pop();
				Y--;
				i++;
			}
			else{
				int x=0;
				while(s[i]>='0'&&s[i]<='9')x=(x<<1)+(x<<3)+(s[i]^'0'),i++;
				sa.push(x);
			}
		}
		while(!sc.empty()){
			int a=sa.top();
			sa.pop();
			int b=sa.top();
			sa.pop();
			if(sc.top()=='+')sa.push((a+b)%mod);
			else if(sc.top()=='-')sa.push(((b-a)%mod+mod)%mod);
			else if(sc.top()=='*')sa.push(a*b%mod);
			else sa.push(fpow(b,a));
			sc.pop();
		}
		if(sa.top()==ans)printf("%c",'A'+i-1);
		a: ;
	}
	return 0;
}
2022/7/29 14:36
加载中...