比赛 暑假综合模拟2 评测结果 AAAAAAAAAA
题目名称 等价表达式 最终得分 100
用户昵称 HYOI_ingn 运行时间 0.057 s
代码语言 C++ 内存使用 0.25 MiB
提交时间 2018-08-05 19:09:57
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int test1=0;
const int test2=1007;
int f(char c) {
	if(c=='+'||c=='-')return 1;
	if(c=='*')return 2;
	if(c=='^')return 3;
	if(c=='(')return 0;
}
void js(stack<int> &s1,stack<char> &s2) {
	int x,y,ans=1,i;
	char ch;
	x=s1.top();
	s1.pop();
	y=s1.top();
	s1.pop();
	ch=s2.top();
	s2.pop();
	if(ch=='*')s1.push(y*x);
	if(ch=='^') {
		for(int i=0; i<x; i++) {
			ans*=y;
		}s1.push(ans);
	}
	if(ch=='+')s1.push(y+x);
	if(ch=='-')s1.push(y-x);
 
}
int ans1[30],ans2;char s[60];
int main() {
	freopen("equal.in","r",stdin);
	freopen("equal.out","w",stdout);
	int n;
	gets(s);scanf("%d\n",&n);
	for(int j=1; j<=n+1; j++) {
		stack<int> si;
		stack<char> sc;
		
		int len=strlen(s),flag=0,temp=0;
		for(int i=0; i<len; i++) {
			if(s[i]==' ')continue;
			if(s[i]=='\n')continue;
			if(s[i]=='a')si.push(test1);
		else	if(s[i]>='0'&&s[i]<='9') {
				temp=temp*10+s[i]-'0';
				flag=1;
			} else {
				if(flag)si.push(temp),temp=0,flag=0;
				if(s[i]=='(') {
					sc.push(s[i]);
					continue;
				}
				if(s[i]==')') {
					while(sc.top()!='(')js(si,sc);
					sc.pop();
					continue;
				}
				if(sc.empty())sc.push(s[i]);
				else {
					while(!sc.empty()&&f(sc.top())>=f(s[i]))js(si,sc);
					sc.push(s[i]);
				}
			}
		}
		if(flag)si.push(temp),temp=0,flag=0;
		while(!sc.empty())js(si,sc);
		if(j==1)ans1[0]=si.top();
		else ans1[j]=si.top();
		for(int i=0; i<len; i++) {
			if(s[i]==' ')continue;
			if(s[i]=='\n')continue;
			if(s[i]=='a')si.push(test2);
		else	if(s[i]>='0'&&s[i]<='9') {
				temp=temp*10+s[i]-'0';
				flag=1;
			} else {
				if(flag)si.push(temp),temp=0,flag=0;
				if(s[i]=='(') {
					sc.push(s[i]);
					continue;
				}
				if(s[i]==')') {
					while(sc.top()!='(')js(si,sc);
					sc.pop();
					continue;
				}
				if(sc.empty())sc.push(s[i]);
				else {
					while(!sc.empty()&&f(sc.top())>=f(s[i]))js(si,sc);
					sc.push(s[i]);
				}
			}
		}
		if(flag)si.push(temp),temp=0,flag=0;
		while(!sc.empty())js(si,sc);
		if(j==1)ans2=si.top();
		else if(si.top()==ans2&&ans1[j]==ans1[0])
		{
			if(j+'A'-2=='T')
			{
				puts("VXY");
				return 0;
			}
			cout<<(char)(j+'A'-2);
		}
		
		gets(s);
	}
}