这是一份使用了 string 的代码。
string s;
void solve(){
long long nump,nums;
nump=nums=0;
cin>>x>>s;
nums=s.length();
for(int i=0;i<x;i++){
nump=(nums-(i+1)+Mod)%Mod;
int f=s[i]-'1';
if(s.length()<x){
string p=s.substr(i+1,nump);
for(int j=1;j<=f;j++){
if(s.length()+nump>x){
s+=p.substr(0,x-s.length());
break;
}
else{
s+=p;
}
}
}
nums+=1ll*nump*f%Mod;
nums%=Mod;
}
cout<<nums<<endl;
}
这是另一份使用了 string 的代码。
string s,p;
void solve(){
long long nump,nums;
nump=nums=0;
cin>>x>>s;
nums=s.length();
for(int i=0;i<x;i++){
nump=(nums-(i+1)+Mod)%Mod;
int f=s[i]-'1';
if(s.length()<x){
p=s.substr(i+1,nump);
for(int j=1;j<=f;j++){
if(s.length()+nump>x){
s+=p.substr(0,x-s.length());
break;
}
else{
s+=p;
}
}
}
nums+=1ll*nump*f%Mod;
nums%=Mod;
}
cout<<nums<<endl;
}
然而,第一份代码交到 CF 的结果是AC,第二份代码交到 CF 的结果是TLE。而差别仅仅是string p
的位置。
这是为什么?