我也是卡半天了
by __wfx @ 2019-03-06 21:04:34
就第五个点
by __wfx @ 2019-03-06 21:04:48
```cpp
#include<map>
#include<set>
#include<list>
#include<stack>
#include<cmath>
#include<queue>
#include<ctime>
#include<deque>
#include<bitset>
#include<vector>
#include<cctype>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 99999999
#define N 1010000
using namespace std;
inline ll read()
{
ll res=0,bo=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')bo=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){res=(res<<1)+(res<<3)+ch-'0';ch=getchar();}
return bo*res;
}
int l[N], r[N], rl[N], n, mid, rm;
char s[N];
int main()
{
scanf("%s", s);
n = strlen(s);
for(int i = n; i; --i){
s[(i << 1) + 1] = s[i];
s[(i << 1)] = '%';
}
n = (n << 1) + 1;
s[0] = '~';
for(int i = 1; i <= n; ++i){
if(i <= rm) rl[i] = min(rl[(mid << 1) - i], rm - i);
else rl[i] = 1;
while(s[i + rl[i]] == s[i - rl[i]]) ++rl[i];
if(rl[i] + i > rm) {
rm = rl[i] + i;
mid = i;
}
}
int R = 0, L = n;
for(int i = 0; i <= n; ++i)
for(; R <= rl[i] + i - 1; ++R)
l[R] = i;
for(int i = n; i >= 0; --i)
for(; L >= i - rl[i] + 1; --L)
r[L] = i;
int ans = 0;
for(int i = 0; i <= n; ++i)
ans = max(ans, r[i] - l[i]);
printf("%d", ans);
return 0;
}
```
by __wfx @ 2019-03-06 21:05:06
@[六耳猕猴](/space/show?uid=100779)
第五个点输出是8
by __wfx @ 2019-03-06 21:39:03
第五个点应该输出8
by __wfx @ 2019-03-06 21:39:38