結果
| 問題 |
No.1417 100の倍数かつ正整数(2)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-08-11 22:16:17 |
| 言語 | Lua (LuaJit 2.1.1734355927) |
| 結果 |
AC
|
| 実行時間 | 11 ms / 3,000 ms |
| コード長 | 1,594 bytes |
| コンパイル時間 | 210 ms |
| コンパイル使用メモリ | 6,940 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-25 08:14:37 |
| 合計ジャッジ時間 | 1,343 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 36 |
ソースコード
local mod = 1000000007
local function badd(a, b) return (a + b) % mod end
local s = io.read()
--[[
1: 1
2: 2
3: 4
4: 5
5: 10
6: 20
7: 25
8: 50
9: 100
]]
local t = {}
t[1] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
t[2] = {2, 3, 3, 5, 6, 6, 8, 9, 9}
t[3] = {}
t[4] = {3, 3, 3, 6, 6, 6, 9, 9, 9}
t[5] = {4, 5, 6, 7, 8, 9, 7, 8, 9}
t[6] = {}
t[7] = {}
t[8] = {}
t[9] = {}
for i = 1, 9 do
t[3][i] = t[1][i]
t[6][i] = t[2][i]
t[7][i] = t[1][i]
t[8][i] = t[4][i]
t[9][i] = t[1][i]
end
local dp1, dp2 = {}, {}
for i = 1, 9 do
dp1[i] = 0
end
local maxstate = 1
local sn = #s
for i = 1, sn do
local ss = s:byte(i) - 48
local src = i % 2 == 1 and dp1 or dp2
local dst = i % 2 == 1 and dp2 or dp1
for j = 1, 9 do
dst[j] = 0
end
local lim = i == 1 and ss - 1 or 9
for j = 1, lim do
local z = t[j][1]
dst[z] = dst[z] + 1
end
if ss == 0 then
maxstate = 0
for j = 1, 9 do
for k = 1, 9 do
local z = t[k][j]
dst[z] = badd(dst[z], src[j])
end
end
else
if 0 < maxstate then
if 1 < i then
for j = 1, ss - 1 do
local z = t[j][maxstate]
dst[z] = badd(dst[z], 1)
end
end
maxstate = t[ss][maxstate]
end
for j = 1, 9 do
for k = 1, 9 do
local z = t[k][j]
dst[z] = badd(dst[z], src[j])
end
end
end
-- print("- " .. maxstate)
-- print("SRC" .. " " .. table.concat(src, " "))
-- print("DST" .. " " .. table.concat(dst, " "))
end
local tbl = sn % 2 == 1 and dp2 or dp1
local ret = tbl[9]
if maxstate == 9 then ret = badd(ret, 1) end
print(ret)