我下载数据发现是对的,但是提交上去就显示WA?
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
string s;
int init(int l,int r){
int ans=0;
if(s[l]=='a') return 13;
for(int i=l;i<=r;i++) ans=(ans*10+(s[i]-'0'))%mod;
return ans;
}
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int deal(int l,int r){
int cnt=0,aos=-1,pos=-1,ccf=-1;
for(int i=l;i<=r;i++){
if(s[i]=='('){
cnt++;
continue;
}
if(s[i]==')'){
cnt--;
continue;
}
if(cnt==0){
if(s[i]=='+'||s[i]=='-') aos=i;
else if(s[i]=='*') pos=i;
else if(s[i]=='^') ccf=i;
}
}
if(cnt>0&&s[l]=='(') return deal(l+1,r);
if(cnt<0&&s[r]==')') return deal(l,r-1);
if(cnt<0){
s='('+s;
return deal(l,r+1);
}
if(s[l]=='('&&s[r]==')'&&aos==-1&&pos==-1&&ccf==-1)
return deal(l+1,r-1);
if(aos>0){
if(s[aos]=='+') return (deal(l,aos-1)+deal(aos+1,r))%mod;
else return (deal(l,aos-1)-deal(aos+1,r)+mod)%mod;
}else if(pos>0){
return deal(l,pos-1)*deal(pos+1,r)%mod;
}else if(ccf>0){
return qpow(deal(l,ccf-1),deal(ccf+1,r));
}
return init(l,r);
}
void rew(string &s,const string &mark){
size_t len=mark.size();
while(1){
size_t pos=s.find(mark);
if(pos==string::npos) return ;
s.erase(pos,len);
}
}
int ans,ans1,n;
int main(){
getline(cin,s);
rew(s," ");
ans=deal(0,s.size()-1);
cin>>n;
cin.get();
for(int i=0;i<n;i++){
getline(cin,s);
rew(s," ");
ans1=deal(0,s.size()-1);
if(ans1==ans) cout<<(char)('A'+i);
}
cout<<'\n';
}