看一下是不是用的string,如果是这样写的,喜提WA 0pts
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e7+5;
string s;
int ri[maxn],n,ans;
int main(){
char c = getchar();
s[0] = '#';
while(c>='a'&&c<='z'){
s[++n] = c;
s[++n] = '#';
c = getchar();
}
s[n] = '#';
int l(0),r(0);
for(int i = 1;i<=n;i++){
if(l<=r)ri[i] = min(ri[l+r-i],r-i+1);
while(i-ri[i]>=0&&i+ri[i]>=0&&s[i+ri[i]]==s[i-ri[i]])ri[i]++;
if(i+ri[i]>r)r = i+ri[i] - 1,l = i-ri[i] + 1;
ans = max(ans,ri[i]);
}
cout<<ans-1;
return 0;
}
应改为
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e7+5;
char s[maxn];
int ri[maxn],n,ans;
int main(){
char c = getchar();
s[0] = '#';
while(c>='a'&&c<='z'){
s[++n] = c;
s[++n] = '#';
c = getchar();
}
s[n] = '#';
int l(0),r(0);
for(int i = 1;i<=n;i++){
if(l<=r)ri[i] = min(ri[l+r-i],r-i+1);
while(i-ri[i]>=0&&i+ri[i]>=0&&s[i+ri[i]]==s[i-ri[i]])ri[i]++;
if(i+ri[i]>r)r = i+ri[i] - 1,l = i-ri[i] + 1;
ans = max(ans,ri[i]);
}
cout<<ans-1;
return 0;
}