結果

問題 No.1331 Moving Penguin
ユーザー 👑 obakyan
提出日時 2022-04-15 16:40:07
言語 Lua
(LuaJit 2.1.1734355927)
結果
AC  
実行時間 489 ms / 1,500 ms
コード長 809 bytes
コンパイル時間 352 ms
コンパイル使用メモリ 5,248 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-11-07 15:25:00
合計ジャッジ時間 15,221 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 49
権限があれば一括ダウンロードができます

ソースコード

diff #

local mod = 1000000007
local function badd(x, y) return (x + y) % mod end

local n = io.read("*n")
local a = {}
local t = {}
for i = 1, n do
  a[i] = io.read("*n")
  t[i] = 0
end
local mini = {}
local lim = 300
for i = 1, lim do
  mini[i] = {}
  for j = 1, i do
    mini[i][j] = 0
  end
end
t[n] = 1
for j = 1, lim do
  local pos = (n % j) + 1
  mini[j][pos] = 1
end
for i = n - 1, 1, -1 do
  local ai = a[i]
  local v = 0
  if lim < ai then
    local dst = i + ai
    while dst <= n do
      v = badd(v, t[dst])
      dst = dst + ai
    end
    v = badd(v, t[i + 1])
  else
    local pos = (i % ai) + 1
    v = mini[ai][pos]
    if 1 < ai then
      v = badd(v, t[i + 1])
    end
  end
  t[i] = v
  for j = 1, lim do
    local pos = (i % j) + 1
    mini[j][pos] = badd(mini[j][pos], v)
  end
end
print(t[1])
0