Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<cstdio>#include<cstring>const int M = 11001000*2;char str[M];int p[M];char s[M];int n;void checkmax(int &ans,int b){if(b>ans) ans=b;}inline int min(int a,int b){return a<b?a:b;}void kp(){int i;int mx = 0;int id;for(i=1; i<n; i++){if( mx > i )p[i] = min( p[2*id-i], p[id]+id-i );elsep[i] = 1;for(; str[i+p[i]] == str[i-p[i]]; p[i]++) ;if( p[i] + i > mx ) {mx = p[i] + i;id = i;}}}void pre(){