#質問の意味
文字列を与えられ、nは頼む番目
同等の文字列セクションの2つの文字かどうかを尋ね、各チャレンジは、2つのセクションから構成され
#問題に対する解決策
各添字のハッシュ値に最初から決定される
各質問Lは、減算することによって決定することができる場合にはRの
前処理アレイPの各記録パワーP
1の#include <ビット/ STDC ++ H> 2 の#define ULLのunsigned long長い 3 使用して 名前空間STDを、 4 CONST INT N = 1E6 + 10、P = 131 。 5 チャーSTR [N]。 6 INT M。 7 ULL H [N]、P [N]。 8 INT メイン(){ 9 のscanf(" %S "、STR + 1 )。 10 CIN >> M。 11 P [ 0 ] = 1 ; 12 INTN = STRLEN(STR + 1 )。 13 のために(INT iは= 1 ; iが<= N; I ++ ){ 14 H [I] = H [I- 1 ] * P +(STR [I] - ' ' + 1 )。 15 P [I] = P [I- 1 ] * P。 16 } 17 ながら(M-- ){ 18 INT L1、R1、L2、R2; 19 CIN >> L1 >> R1 >> L2 >> R2。 20 であれば(H [R1] - ([L1- H 1 ] * P [R1-L1 + 1 ])== H [R2] - (H [L2- 1 ] * P [R2-L2 + 1 ])) 21 COUT << " はい" << ENDL。 22 他の 23 coutの<< " ノー" << てendl; 24 } 25 }