問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
ハッシュ関数は文字列検索を高速におこなうアルゴリズムに応用することができます。そのアルゴリズムがローリングハッシュです。本問では、このローリングハッシュを実装してみましょう。
長さが L の文字列 S が与えられます。その後、N 個の文字列 t_i (1 ≦ i ≦ N) が与えられます。文字列 S の中に t_i が部分文字列として含まれるかどうか以下のハッシュ関数 H を用いて判定し、含まれているならば Yes
、含まれていないならば No
とそれぞれについて出力してください。
文字列 s の長さを m として、
H(s) = (s の 1 文字目の文字コード * Bm-1 + s の 2 文字目の文字コード * Bm-2 + ... + s の m 文字目の文字コード * B0) % mod
L N
S
t_1
t_2
...
t_n
N 行出力してください。i (1 ≦ i ≦ N) 行目には、文字列 t_i が文字列 S の部分文字列として含まれているならば Yes
、そうでないならば No
と出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
5 4
paiza
b
ai
pizza
paiza
No
Yes
No
Yes
10 5
1234567890
59
9346
2
764
23
No
No
Yes
No
Yes