WA了第5个点?!?

P4555 [国家集训队] 最长双回文串

我也是卡半天了
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


|