提出 #66638547


ソースコード 拡げる

MOD = 10**9 + 7
BASE = 31

# 入力読み込み
n, q = gets.split.map(&:to_i)
s = gets.strip

# 前処理:ハッシュと累乗テーブル
hash = Array.new(n + 1, 0)
power = Array.new(n + 1, 1)

(0...n).each do |i|
  code = s[i].ord - 'a'.ord + 1
  hash[i + 1] = (hash[i] * BASE + code) % MOD
  power[i + 1] = (power[i] * BASE) % MOD
end

# 部分ハッシュを取り出す関数(1-indexed)
def get_hash(l, r, hash, power)
  val = hash[r] - hash[l - 1] * power[r - l + 1] % MOD
  (val + MOD) % MOD
end

# クエリ処理
q.times do
  a, b, c, d = gets.split.map(&:to_i)
  h1 = get_hash(a, b, hash, power)
  h2 = get_hash(c, d, hash, power)
  puts h1 == h2 ? "Yes" : "No"
end

提出情報

提出日時
問題 A56 - String Hash
ユーザ myoshizumi
言語 Ruby (ruby 3.2.2)
得点 1000
コード長 713 Byte
結果 AC
実行時間 440 ms
メモリ 21244 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 440 ms 21108 KiB
max_01.txt AC 349 ms 21244 KiB
max_02.txt AC 349 ms 20832 KiB
max_03.txt AC 354 ms 21116 KiB
min_01.txt AC 43 ms 16852 KiB
random_01.txt AC 377 ms 21048 KiB
random_02.txt AC 368 ms 21060 KiB
random_03.txt AC 371 ms 21108 KiB
random_04.txt AC 369 ms 21088 KiB
random_05.txt AC 367 ms 21132 KiB
sample_01.txt AC 42 ms 17212 KiB