#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #define N 500010 チャーT [N]、[N << 1]はSであり; INT、N = 0、lenの; INT P [N << 1]、G [N << 1]。 ボイドManacher(){ int型POS = 0、X = 0、ID = 0。 以下のために(INT I = 1、I <N; I ++){ IF(POS> I)のx =分(P [ID * 2-I]、POS-I + 1)。 他のx = 0; 一方、(S [IX] == S [I + X])はx ++; バツ - ; IF(I + X> POS)POS = I + X、ID = I。 P [I] = X。 } } int型のmain(){ scanf関数( "%dの%s"は、&lenは、T); S [0] = '!'; 以下のために(INT I 0 =; I <LEN; I ++){ S [N ++] = '#'。 S [N ++] = T [i]は、 } S [N ++] = '#'。 Manacher(); int型ANS = 0; 以下のために(INT I 0 =、I <N; ++ I) G [I] = P [2 * I + 1] / 2。 以下のために(INT I 0 =、I <N; ++ I) のために(INT J = G [I] / 2; J && J 4 *> ANS; j--) IF(G [I + J]> = J && G [IJ ]> = J)ANS = MAX(ANS、4 * J)。 printf( "%dの"、ANS)。 0を返します。 } ZZ https://blog.csdn.net/dream_maker_yk/article/details/80804663
BZOJ2342 Shoi2011ダブル回文
おすすめ
転載: www.cnblogs.com/cutemush/p/12370089.html
おすすめ
ランキング