A56 - String Hash
Editorial
/
Time Limit: 2 sec / Memory Limit: 1024 MB
配点: 1000 点
問題文
長さ N の文字列 S が与えられます。以下の Q 個のクエリを処理してください。
- i 個目のクエリ:S[a_i, b_i] と S[c_i, d_i] は一致するか?
ただし、S[l, r] は S の l 文字目から r 文字目までの連続部分文字列のことを指します。
制約
- N, Q, a_i, b_i, c_i, d_i は整数である
- S は英小文字からなる文字列である
- 1 \leq N \leq 200000
- 1 \leq Q \leq 200000
- |S| = N
- 1 \leq a_i \leq b_i \leq N
- 1 \leq c_i \leq d_i \leq N
- b_i - a_i = d_i - c_i
入力
入力は以下の形式で標準入力から与えられます。
N Q S a_1 b_1 c_1 d_1 a_2 b_2 c_2 d_2 \vdots a_Q b_Q c_Q d_Q
出力
Q 行にわたって出力してください。i 行目には、i 個目のクエリで文字列が一致する場合 Yes
、そうでない場合 No
と出力してください。
入力例 1
7 3 abcbabc 1 3 5 7 1 5 2 6 1 2 6 7
出力例 1
Yes No No
1 個目のクエリでは、S[1, 3] と S[5, 7] が一致するかどうか聞かれています。いずれも abc
であり一致するので、Yes
と出力します。
2 個目のクエリでは、S[1, 5] と S[2, 6] が一致するかどうか聞かれています。S[1, 5] = abcba
、S[2, 6] = bcbab
であり一致しないので、No
と出力します。