結果
| 問題 | No.3461 Min GCD |
| コンテスト | |
| ユーザー |
tomerun
|
| 提出日時 | 2026-02-28 14:43:29 |
| 言語 | Crystal (1.19.1) |
| 結果 |
AC
|
| 実行時間 | 715 ms / 2,000 ms |
| + 491µs | |
| コード長 | 743 bytes |
| 記録 | |
| コンパイル時間 | 8,118 ms |
| コンパイル使用メモリ | 341,244 KB |
| 実行使用メモリ | 448,000 KB |
| 最終ジャッジ日時 | 2026-07-25 06:00:40 |
| 合計ジャッジ時間 | 11,849 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
n, k = read_line.split.map(&.to_i64)
a = read_line.split.map(&.to_i)
b = read_line.split.map(&.to_i)
cnt = Array.new(n) do |i|
divs = [] of Int32
d = 1
while d * d < a[i]
if a[i] % d == 0
divs << d << a[i] // d
end
d += 1
end
if d * d == a[i]
divs << d
end
c = [] of Tuple(Int32, Int64)
divs.sort.each do |d|
rem = b[i] % d
use = rem == 0 ? 0 : d - rem
while c.size > 0 && c[-1][1] >= use
c.pop
end
c << {d, use.to_i64}
end
c
end
lo = 1
hi = a.min + 1
while hi - lo > 1
mid = (lo + hi) // 2
need = n.times.sum do |i|
idx = cnt[i].bsearch_index { |x, _| x[0] >= mid }.not_nil!
cnt[i][idx][1]
end
if need <= k
lo = mid
else
hi = mid
end
end
puts lo
tomerun