为什么WA+TLE
查看原帖
为什么WA+TLE
738213
kuikuidadi楼主2025/1/22 09:40

我下载数据发现是对的,但是提交上去就显示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';
}
2025/1/22 09:40
加载中...