結果
| 問題 |
No.1269 I hate Fibonacci Number
|
| コンテスト | |
| ユーザー |
tpyneriver
|
| 提出日時 | 2020-10-23 23:55:01 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 176 ms / 3,000 ms |
| コード長 | 1,226 bytes |
| コンパイル時間 | 204 ms |
| コンパイル使用メモリ | 82,568 KB |
| 実行使用メモリ | 77,028 KB |
| 最終ジャッジ日時 | 2024-07-21 13:56:04 |
| 合計ジャッジ時間 | 4,514 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 36 |
ソースコード
import sys
readline = sys.stdin.readline
N, L, R = map(int, readline().split())
Fib = []
a, b = 1, 1
while b <= R:
Fib.append(b)
a, b = b, a+b
L -= 1
a, b = 1, 1
while b <= L:
Fib.remove(b)
a, b = b, a+b
Fib = [list(map(int, str(s))) for s in Fib]
S = set()
S.add(tuple())
banned = set()
for f in Fib:
for l in range(len(f)):
S.add(tuple(f[:l+1]))
banned.add(tuple(f))
D = dict()
Di = dict()
for i in range(len(S)):
s = S.pop()
D[s] = i
Di[i] = s
emp = D[tuple()]
Edge = []
for i in range(len(Di)):
s = list(Di[i])
E = []
for num in range(10):
t = tuple(s+[num])
lt = len(t)
for ti in range(lt+1):
if t[ti:] in banned:
break
else:
for ti in range(lt+1):
if t[ti:] in D:
E.append(D[t[ti:]])
break
Edge.append(E)
LD = len(D)
dp = [0]*LD
dp[emp] = 1
MOD = 10**9+7
for _ in range(N):
dp2 = [0]*LD
for j in range(LD):
dj = dp[j]
if not dj:
continue
for e in Edge[j]:
dp2[e] = (dp2[e] + dj)%MOD
dp = dp2[:]
print((sum(dp)-1)%MOD)
tpyneriver