提出 #66637911
ソースコード 拡げる
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin', 'utf8').trim().split('\n');
const [N, Q] = input[0].split(' ').map(Number);
const S = input[1];
const queries = input.slice(2).map(line => line.split(' ').map(Number));
const MOD = 10n ** 9n + 7n;
const BASE = 31n;
// 文字列のプレフィックスハッシュと base の累乗を事前に計算
const prefixHash = Array(N + 1).fill(0n);
const power = Array(N + 1).fill(1n);
for (let i = 0; i < N; i++) {
const code = BigInt(S.charCodeAt(i) - 97 + 1);
prefixHash[i + 1] = (prefixHash[i] * BASE + code) % MOD;
power[i + 1] = (power[i] * BASE) % MOD;
}
// 区間 [l, r](1-indexed)のハッシュを取得
function getHash(l, r) {
const hash = (prefixHash[r] - (prefixHash[l - 1] * power[r - l + 1]) % MOD + MOD) % MOD;
return hash;
}
const output = [];
for (const [a, b, c, d] of queries) {
output.push(getHash(a, b) === getHash(c, d) ? 'Yes' : 'No');
}
console.log(output.join('\n'));
提出情報
| 提出日時 | |
|---|---|
| 問題 | A56 - String Hash |
| ユーザ | myoshizumi |
| 言語 | JavaScript (Node.js 18.16.1) |
| 得点 | 1000 |
| コード長 | 1013 Byte |
| 結果 | AC |
| 実行時間 | 513 ms |
| メモリ | 145224 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 | 513 ms | 136712 KiB |
| max_01.txt | AC | 363 ms | 143068 KiB |
| max_02.txt | AC | 399 ms | 143716 KiB |
| max_03.txt | AC | 403 ms | 144264 KiB |
| min_01.txt | AC | 39 ms | 42788 KiB |
| random_01.txt | AC | 497 ms | 138012 KiB |
| random_02.txt | AC | 471 ms | 137928 KiB |
| random_03.txt | AC | 462 ms | 145224 KiB |
| random_04.txt | AC | 434 ms | 145096 KiB |
| random_05.txt | AC | 421 ms | 144952 KiB |
| sample_01.txt | AC | 38 ms | 42852 KiB |