// すばやく2つの文字列が等しくないかどうかを決定 する#include <ビット/ STDC ++ H.> 使用して名前空間STD; typedefの符号なしのロングロングULLは、 CONST INT N = 100010は、P = 131であり ; // エラー状態13331経験両方最小INT N-、M; CHAR STR [N]; ULL H [N]、P [N]; // Hプレフィックスのハッシュ値を示し、Pはパワーである ULLのGET(int型 L、INT R&LT){ 戻り H 【R&LT] -H [1- 1 ] * P [+ L-R&LT 1 ]; //は、ハッシュ値の一定期間を返す} int型のmain(){ CIN >> M >> N-STR + 1 、 P [ 0 ] = 1 ; // P 0 1番目 のための(INT I = 1 ; I <= N; I ++ ){ P [I] = P [ I- 1 ] * P; // べき乗 H [I] = H [I- 1 ] + STR * P [I]; // 検索ハッシュ値のプレフィックス } ながら(M-- ){ int型L1、R1、 L2、R2; CIN >> L1 L2 >> >> R1 、R2、 IF(GET(L1、R1)== GET(L2、R2))プット(" はい「); // ハッシュ値が等しい場合 そうプット(「いいえ」); } 戻り 0 ; }