結果
問題 | No.134 走れ!サブロー君 |
ユーザー |
👑 |
提出日時 | 2020-04-26 10:55:38 |
言語 | Lua (LuaJit 2.1.1734355927) |
結果 |
AC
|
実行時間 | 19 ms / 5,000 ms |
コード長 | 2,208 bytes |
コンパイル時間 | 355 ms |
コンパイル使用メモリ | 6,816 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-11-16 03:00:56 |
合計ジャッジ時間 | 1,046 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 15 |
ソースコード
local mmi, mma = math.min, math.maxlocal mab = math.abslocal bls, brs = bit.lshift, bit.rshiftlocal bxor = bit.bxorlocal xb, yb = io.read("*n", "*n")local n = io.read("*n")local x, y, w = {}, {}, {}for i = 1, n dox[i], y[i], w[i] = io.read("*n", "*n", "*n")endlocal wsum = {}local tot = bls(1, n)for i = 1, tot dolocal ti = i - 1local ws = 0for j = 1, n doif ti % 2 == 1 thenws = ws + w[j]endti = brs(ti, 1)endwsum[i] = wsendlocal len = {}for i = 1, n dolen[i] = {}for j = 1, n dolen[i][j] = mab(x[i] - x[j]) + mab(y[i] -y[j])endendlocal alltask = {}local stagetask = {}for i = 1, n doalltask[i] = {}stagetask[i] = {}endfor i = 1, n dofor j = 1, tot - 1 do-- set inf valuealltask[i][j] = 1000000007endendfor i = 1, tot - 1 dolocal ti = ilocal cnt = 0for j = 1, n doif ti % 2 == 1 thencnt = cnt + 1ti = ti - 1endti = ti / 2endtable.insert(stagetask[cnt], i)end-- set first statefor i = 1, n dolocal v = mab(xb - x[i]) + mab(yb - y[i])alltask[i][bls(1, i - 1)] = v * (wsum[tot] + 100) / 120 + w[i]enddofor stage = 1, n - 1 dolocal stlen = #stagetask[stage]for i_stagetask = 1, stlen dolocal used = stagetask[stage][i_stagetask]local rem = bxor(tot - 1, used)local rem_w = wsum[rem + 1]local t_used = usedfor i = 1, n doif t_used % 2 == 1 thenlocal val = alltask[i][used]local mul = 1local tmp = usedfor j = 1, n doif tmp % 2 == 0 thenlocal v = len[i][j] * (rem_w + 100) / 120 + w[j]alltask[j][used + mul] = mmi(alltask[j][used + mul], val + v)-- alltask[j][used + mul] = val + func(from i to j)elsetmp = tmp - 1endtmp = tmp / 2mul = mul * 2endt_used = t_used - 1endt_used = t_used / 2endendendendlocal ret = 1000000007for i = 1, n dolocal l = mab(xb - x[i]) + mab(yb - y[i])ret = mmi(ret, alltask[i][tot - 1] + l * 100 / 120)endprint(string.format("%.10f", ret))