結果
| 問題 | No.3461 Min GCD |
| コンテスト | |
| ユーザー |
tomerun
|
| 提出日時 | 2026-02-28 14:43:29 |
| 言語 | Crystal (1.22.1 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 757 ms / 2,000 ms |
| + 826µs | |
| コード長 | 743 bytes |
| 記録 | |
| コンパイル時間 | 10,113 ms |
| コンパイル使用メモリ | 341,296 KB |
| 実行使用メモリ | 455,796 KB |
| 最終ジャッジ日時 | 2026-10-28 15:32:27 |
| 合計ジャッジ時間 | 14,055 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge5_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 |
ソースコード
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