結果
問題 | No.217 魔方陣を作ろう |
ユーザー |
👑 |
提出日時 | 2020-05-04 15:40:18 |
言語 | Lua (LuaJit 2.1.1734355927) |
結果 |
AC
|
実行時間 | 3 ms / 5,000 ms |
コード長 | 3,090 bytes |
コンパイル時間 | 65 ms |
コンパイル使用メモリ | 6,944 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-24 10:21:06 |
合計ジャッジ時間 | 1,113 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 |
ソースコード
local n = io.read("*n")local t = {}for i = 1, n * n do t[i] = 0 endif n % 2 == 1 thenlocal hn = math.floor(n / 2) + 1local curh = 1local curw = hnfor i = 1, n * n dot[(curh - 1) * n + curw] = icurh = curh - 1if curh == 0 then curh = n endcurw = curw + 1if curw == n + 1 then curw = 1 endif 0 < t[(curh - 1) * n + curw] thencurh = curh + 2if n < curh then curh = curh - n endcurw = curw - 1if curw == 0 then curw = n endendendelseif n % 4 == 0 thenlocal k1 = {0, 1, 0, 1, 2, 3, 2, 3}local k2 = {0, 0, 1, 1, 2, 2, 3, 3}for i = 1, n dofor j = 1, n dolocal idx = (i - 1) * n + jlocal ip4, jp4 = i % 4, j % 4local f = falsefor k = 1, 8 doif ip4 == k1[k] and jp4 == k2[k] thenf = true breakendendif f thent[idx] = idxelset[idx] = n * n + 1 - idxendendendelselocal b = {}local tn = math.floor(n / 2)for i = 1, tn * tn do b[i] = 0 endlocal hn = math.floor(tn / 2) + 1local curh = 1local curw = hnfor i = 1, tn * tn dob[(curh - 1) * tn + curw] = icurh = curh - 1if curh == 0 then curh = tn endcurw = curw + 1if curw == tn + 1 then curw = 1 endif 0 < b[(curh - 1) * tn + curw] thencurh = curh + 2if tn < curh then curh = curh - tn endcurw = curw - 1if curw == 0 then curw = tn endendendfor i = 1, tn * tn dob[i] = (b[i] - 1) * 4endfor i = 1, tn dofor j = 1, tn doif i < hn or (i == hn and j ~= hn) or (i == hn + 1 and j == hn) thent[(i - 1) * 2 * n + j * 2 - 1] = b[(i - 1) * tn + j] + 4t[(i - 1) * 2 * n + j * 2 - 0] = b[(i - 1) * tn + j] + 1t[(i - 1) * 2 * n + n + j * 2 - 1] = b[(i - 1) * tn + j] + 2t[(i - 1) * 2 * n + n + j * 2 - 0] = b[(i - 1) * tn + j] + 3elseif i <= hn + 1 thent[(i - 1) * 2 * n + j * 2 - 1] = b[(i - 1) * tn + j] + 1t[(i - 1) * 2 * n + j * 2 - 0] = b[(i - 1) * tn + j] + 4t[(i - 1) * 2 * n + n + j * 2 - 1] = b[(i - 1) * tn + j] + 2t[(i - 1) * 2 * n + n + j * 2 - 0] = b[(i - 1) * tn + j] + 3elset[(i - 1) * 2 * n + j * 2 - 1] = b[(i - 1) * tn + j] + 1t[(i - 1) * 2 * n + j * 2 - 0] = b[(i - 1) * tn + j] + 4t[(i - 1) * 2 * n + n + j * 2 - 1] = b[(i - 1) * tn + j] + 3t[(i - 1) * 2 * n + n + j * 2 - 0] = b[(i - 1) * tn + j] + 2endendendendfor i = 1, n dofor j = 1, n doio.write(t[(i - 1) * n + j])io.write(j == n and "\n" or " ")endendlocal ast = math.floor(n * (n * n + 1) / 2)for i = 1, n dolocal c = 0for j = 1, n doc = c + t[(i - 1) * n + j]endassert(ast == c)endfor j = 1, n dolocal c = 0for i = 1, n doc = c + t[(i - 1) * n + j]endassert(ast == c)enddolocal c = 0for i = 1, n doc = c + t[(i - 1) * n + i]endassert(ast == c)enddolocal c = 0for i = 1, n doc = c + t[(i - 1) * n + n + 1 - i]endassert(ast == c)end