提出 #66638461
ソースコード 拡げる
<?php
fscanf(STDIN, "%d %d", $N, $Q);
$S = trim(fgets(STDIN));
define('MOD', 1000000007);
define('BASE', 31);
// プレフィックスハッシュと累乗を初期化
$hash = array_fill(0, $N + 1, 0);
$power = array_fill(0, $N + 1, 1);
// ハッシュと累乗の前計算
for ($i = 0; $i < $N; $i++) {
$code = ord($S[$i]) - ord('a') + 1;
$hash[$i + 1] = ($hash[$i] * BASE + $code) % MOD;
$power[$i + 1] = ($power[$i] * BASE) % MOD;
}
// ハッシュ取得関数(1-indexed)
function getHash($l, $r, $hash, $power) {
$val = ($hash[$r] - ($hash[$l - 1] * $power[$r - $l + 1]) % MOD + MOD) % MOD;
return $val;
}
// クエリ処理
for ($i = 0; $i < $Q; $i++) {
fscanf(STDIN, "%d %d %d %d", $a, $b, $c, $d);
$h1 = getHash($a, $b, $hash, $power);
$h2 = getHash($c, $d, $hash, $power);
echo ($h1 === $h2 ? "Yes" : "No") . "\n";
}
?>
提出情報
| 提出日時 |
|
| 問題 |
A56 - String Hash |
| ユーザ |
myoshizumi |
| 言語 |
PHP (php 8.2.8) |
| 得点 |
1000 |
| コード長 |
905 Byte |
| 結果 |
AC |
| 実行時間 |
350 ms |
| メモリ |
28020 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
1000 / 1000 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt |
| All |
killer_01.txt, max_01.txt, max_02.txt, max_03.txt, min_01.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, sample_01.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| killer_01.txt |
AC |
350 ms |
27440 KiB |
| max_01.txt |
AC |
301 ms |
27428 KiB |
| max_02.txt |
AC |
307 ms |
27548 KiB |
| max_03.txt |
AC |
308 ms |
27388 KiB |
| min_01.txt |
AC |
15 ms |
21400 KiB |
| random_01.txt |
AC |
330 ms |
27712 KiB |
| random_02.txt |
AC |
323 ms |
27920 KiB |
| random_03.txt |
AC |
320 ms |
27856 KiB |
| random_04.txt |
AC |
321 ms |
27628 KiB |
| random_05.txt |
AC |
316 ms |
28020 KiB |
| sample_01.txt |
AC |
14 ms |
21236 KiB |