バニーバニー(ハッシュが一致

質問の意味
文字列を与えられ、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 }

 

おすすめ

転載: www.cnblogs.com/hhyx/p/12514854.html