能AC的代码输入部分如下
c = getchar();
while(c >= 'a'&&c <= 'z'){
s[slen++] = c;
s[slen++] = '#';
c = getchar();
if(c == EOF)break;
}
会WA一个的代码的如下
c = getchar();
while(c >= 'a'&&c <= 'z'){
s[slen++] = c;
s[slen++] = '#';
c = getchar();
}
是什么导致这两种输入一个是正确的,但另一个是WA的呢,而且只有一个测试点被卡掉了?完整的代码如下
#include <cstdio>
#include <iostream>
#define MAXN 11000005
using namespace std;
int main(){
int n;
int d[MAXN * 2] = {0};
int l = 0,r = -1,ans = 1,slen = 1;
char s[MAXN * 2],c;
s[0] = '#';
c = getchar();
while(c >= 'a'&&c <= 'z'){
s[slen++] = c;
s[slen++] = '#';
c = getchar();
if(c == EOF)break;
}
for(int i = 1;i < slen; i ++){
if(i < r)d[i] = min(r-i,d[r-i+l]);
while(s[i+d[i]+1] == s[i-d[i]-1])d[i] ++;
if(i + d[i] > r)r = i + d[i],l = i - d[i];
ans = max(ans,d[i]);
}
cout<<ans<<endl;
}