这份代码
#include <bits/stdc++.h>
using namespace std;
int n,f[2000011],v[2000011];
char s[2000011];
const int P=10000;
int dfs(int l,int r){
if(f[r]>=l)return (dfs(l,f[r]-1)+dfs(f[r]+1,r))%P;
if(v[r]>=l)return dfs(l,v[r]-1)*dfs(v[r]+1,r)%P;
if(v[r]<l&&f[r]<l){
int x=0;
for(int i = l;i <= r;i++)x=x*10+(s[i]-'0');
return x%P;
}
}
int main(){
scanf("%s",s+1);
for(int i = 1;i <=strlen(s+1);i++){
if(s[i]=='+')f[i]=i;
else f[i]=f[i-1];
if(s[i]=='*')v[i]=i;
else v[i]=v[i-1];
}
printf("%d",dfs(1,strlen(s+1)));
return 0;
}
TLE
但多加一个n=strlen(s+1);
#include <bits/stdc++.h>
using namespace std;
int n,f[2000011],v[2000011];
char s[2000011];
const int P=10000;
int dfs(int l,int r){
if(f[r]>=l)return (dfs(l,f[r]-1)+dfs(f[r]+1,r))%P;
if(v[r]>=l)return dfs(l,v[r]-1)*dfs(v[r]+1,r)%P;
if(v[r]<l&&f[r]<l){
int x=0;
for(int i = l;i <= r;i++)x=x*10+(s[i]-'0');
return x%P;
}
}
int main(){
scanf("%s",s+1);
n=strlen(s+1);//这里
for(int i = 1;i <=strlen(s+1);i++){
if(s[i]=='+')f[i]=i;
else f[i]=f[i-1];
if(s[i]=='*')v[i]=i;
else v[i]=v[i-1];
}
printf("%d",dfs(1,strlen(s+1)));
return 0;
}
就不超时了
啊??