比赛 |
暑假综合模拟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;
}