比赛 暑假综合模拟2 评测结果 AAAAAAAAAA
题目名称 等价表达式 最终得分 100
用户昵称 Sakura 运行时间 0.071 s
代码语言 C++ 内存使用 0.12 MiB
提交时间 2018-08-05 16:57:18
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
string s1,s2;
int n;
ll check,result,final;
ll num[50],op[50];
ll qpow(ll a,ll b){
	ll k=1;
	for(ll i=1;i<=b;i++)
		k*=a;
		return k;
}
void cul(int p,int op){
	if(op==0) num[p-1]=num[p-1]+num[p];
	if(op==1) num[p-1]=num[p-1]-num[p];
	if(op==2) num[p-1]=num[p-1]*num[p];
	if(op==5) num[p-1]=qpow(num[p-1],num[p]);
}
ll res(string str){
	int op_next,len=str.length(),p=-1,q=-1;
	ll num_next=0;
	for(int i=0;i<len;i++){
		if(str[i]=='a')
		    num[++p]=check;
		else if(str[i]>='0' && str[i]<='9')
		    num_next = num_next*10+(str[i]-'0');
		else if(str[i]!=' '){
			if(num_next!=0){
				num[++p]=num_next;
				num_next=0;
			}
			if(str[i]=='+')op_next=0;
			if(str[i]=='-')op_next=1;
			if(str[i]=='*')op_next=2;
			if(str[i]=='^')op_next=5;
			if(str[i]=='(')op_next=6;
			if(str[i]==')')op_next=7;
			if(op_next==6)
			    op[++q]=op_next;
			else if(op_next==7){
				while(q>=0 && op[q--]!=6){
					cul(p--,op[q+1]);
				}
			}
			else{
				while(q>=0 && op[q]<=5 && op[q]/2>=op_next/2){
					cul(p--,op[q--]);
				}
				op[++q]=op_next;
			}
		}
	}
	if(num_next!=0){
		num[++p]=num_next;
		num_next=0;
	}
	while(q>=0) cul(p--,op[q--]);
	return num[0];
}
int main()
{
	freopen("equal.in","r",stdin);
	freopen("equal.out","w",stdout);
	final=0;
	getline(cin,s1);
	cin>>n;
	getline(cin,s2);
	while(n--){
		bool flag=true;
		getline(cin,s2);
		for(int i=10;i<=20;i++){
			check=i;
			if(res(s1)!=res(s2)){
				flag=false;
				break;
			}
		}
		if(flag) cout<<(char)('A'+final);
		final++;
	}
	return 0;
}