結果
| 問題 |
No.2078 魔抜けなパープル
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2022-09-25 21:46:39 |
| 言語 | Lua (LuaJit 2.1.1734355927) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,533 bytes |
| コンパイル時間 | 279 ms |
| コンパイル使用メモリ | 6,696 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-22 14:32:51 |
| 合計ジャッジ時間 | 652 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 |
ソースコード
local mfl, mce = math.floor, math.ceil
local mmi, mma = math.min, math.max
local ga = 0
local gx = 0
local function triplediv_solve(use)
local ans = use * gx
local base = mfl(ga / use)
local rem = ga % use
ans = ans + base * base * (use - rem) + (base + 1) * (base + 1) * rem
return ans
end
local function triplediv(xmin, xmax, rep)
local func = triplediv_solve
local left_v, right_v = func(xmin), func(xmax)
while 10 < xmax - xmin do
local xmid1, xmid2 = mfl((xmin * 2 + xmax) / 3), mfl((xmin + xmax * 2) / 3)
local mid_v1, mid_v2 = func(xmid1), func(xmid2)
if left_v > mid_v1 then
if mid_v2 > right_v then
xmin = xmid2
left_v = mid_v2
elseif mid_v1 > mid_v2 then
xmin = xmid1
left_v = mid_v1
else
xmax = xmid2
right_v = mid_v2
end
else
if mid_v2 < right_v then
xmax = xmid1
right_v = mid_v1
elseif mid_v1 < mid_v2 then
xmin = xmid1
left_v = mid_v1
else
xmax = xmid2
right_v = mid_v2
end
end
end
local cand, candx = func(xmin), xmin
for i = xmin + 1, xmax do
local z = func(i)
if z < cand then
cand, candx = z, i
end
end
return candx
end
local function solve()
local x, a = io.read("*n", "*n")
ga, gx = a, x
-- for i = 1, a do
-- print(i, triplediv_solve(i))
-- end
-- os.exit()
local xcnt = triplediv(1, a, 40)
print(triplediv_solve(xcnt))
end
local q = io.read("*n")
for iq = 1, q do
solve()
end