很迷惑的超时
查看原帖
很迷惑的超时
731213
I_KUN楼主2024/7/22 18:33

这份代码

#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;
}

就不超时了

啊??

2024/7/22 18:33
加载中...