結果
問題 | No.194 フィボナッチ数列の理解(1) |
ユーザー | 👑 obakyan |
提出日時 | 2021-07-27 21:20:16 |
言語 | Lua (LuaJit 2.1.1734355927) |
結果 |
AC
|
実行時間 | 41 ms / 5,000 ms |
コード長 | 2,006 bytes |
コンパイル時間 | 78 ms |
コンパイル使用メモリ | 6,820 KB |
実行使用メモリ | 10,956 KB |
最終ジャッジ日時 | 2024-07-23 18:35:45 |
合計ジャッジ時間 | 2,114 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
local mod = 1000000007local mfl = math.floorlocal function bmul(x, y)local x1, y1 = mfl(x / 31623), mfl(y / 31623)local x0, y0 = x - x1 * 31623, y - y1 * 31623return (x1 * y1 * 14122 + (x1 * y0 + x0 * y1) * 31623 + x0 * y0) % modendlocal function badd(x, y)return (x + y) % modendlocal function bsub(x, y)return x < y and x - y + mod or x - yendlocal n, k = io.read("*n", "*n")local a = {}for i = 1, n doa[i] = io.read("*n")endlocal function solve1()local totsum = 0for i = 1, n dototsum = badd(totsum, a[i])endlocal cur = totsumfor i = n + 1, k doa[i] = curtotsum = badd(totsum, a[i])cur = badd(cur, a[i])cur = bsub(cur, a[i - n])endprint(a[k] .. " " .. totsum)endlocal function solve2()local mat = {}for i = 1, n + 1 domat[i] = {}for j = 1, n + 1 domat[i][j] = 0endendfor i = 1, n domat[1][i] = 1endfor i = 1, n - 1 domat[i + 1][i] = 1endfor i = 1, n + 1 domat[n + 1][i] = 1endlocal vec = {}for i = 1, n dovec[i] = a[n + 1 - i]endvec[n + 1] = 0for i = 1, n do vec[n + 1] = badd(vec[n + 1], a[i]) endk = k - nn = n + 1local tmpmat = {}for i = 1, n dotmpmat[i] = {}endlocal tmpvec = {}local function matmat()for i = 1, n dofor j = 1, n dolocal v = 0for k = 1, n dov = badd(v, bmul(mat[i][k], mat[k][j]))endtmpmat[i][j] = vendendfor i = 1, n do for j = 1, n domat[i][j] = tmpmat[i][j]end endendlocal function matvec()for i = 1, n dolocal v = 0for k = 1, n dov = badd(v, bmul(mat[i][k], vec[k]))endtmpvec[i] = vendfor i = 1, n dovec[i] = tmpvec[i]endendwhile 0 < k doif k % 2 == 1 thenmatvec()endmatmat()k = mfl(k / 2)endprint(vec[1] .. " " .. vec[n])endif k <= 1000000 thensolve1()elsesolve2()end