結果
| 問題 | No.2157 崖 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-12-29 11:25:18 |
| 言語 | Lua (LuaJit 2.1.1734355927) |
| 結果 |
AC
|
| 実行時間 | 3,951 ms / 6,000 ms |
| コード長 | 1,286 bytes |
| 記録 | |
| コンパイル時間 | 327 ms |
| コンパイル使用メモリ | 5,504 KB |
| 実行使用メモリ | 29,696 KB |
| 最終ジャッジ日時 | 2024-11-24 13:29:16 |
| 合計ジャッジ時間 | 37,327 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 |
ソースコード
local n, m = io.read("*n", "*n")
local d = {}
for i = 1, n do
d[i] = {}
for j = 1, m do
d[i][j] = io.read("*n")
end
table.sort(d[i])
end
local dp1, dp2 = {}, {}
local function solve(x)
for i = 1, m + 1 do
dp1[i] = true
end
for i = 2, n do
local src = i % 2 == 0 and dp1 or dp2
local dst = i % 2 == 0 and dp2 or dp1
for j = 1, m + 1 do
dst[j] = 0
end
local dsrc = d[i - 1]
local ddst = d[i]
local bleft, bright = 1, 1
for apos = 1, m do
while bleft <= m and ddst[bleft] < dsrc[apos] do
bleft = bleft + 1
end
if m < bleft then break end
while bright <= m and ddst[bright] <= dsrc[apos] + x do
bright = bright + 1
end
if src[apos] then
dst[bleft] = dst[bleft] + 1
dst[bright] = dst[bright] - 1
end
end
for j = 2, m do
dst[j] = dst[j] + dst[j - 1]
end
local f = false
for j = 1, m do
dst[j] = 0 < dst[j]
if dst[j] then f = true end
end
if not f then return false end
end
return true
end
local min, max = -1, 1000000000
while 1 < max - min do
local mid = math.floor((min + max) / 2)
if solve(mid) then
max = mid
else
min = mid
end
end
if max == 1000000000 then print(-1)
else print(max)
end