提出 #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
結果
AC × 1
AC × 11
セット名 テストケース
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