結果
| 問題 | No.260 世界のなんとか3 |
| コンテスト | |
| ユーザー |
asumo0729
|
| 提出日時 | 2022-02-12 17:04:45 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 2,971 bytes |
| 記録 | |
| コンパイル時間 | 202 ms |
| コンパイル使用メモリ | 82,456 KB |
| 実行使用メモリ | 83,688 KB |
| 最終ジャッジ日時 | 2024-06-28 19:13:02 |
| 合計ジャッジ時間 | 3,590 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 1 MLE * 26 |
ソースコード
import sys
from operator import itemgetter
from collections import defaultdict, deque
import heapq
import bisect
import math
import itertools
stdin=sys.stdin
sys.setrecursionlimit(10 ** 8)
ip=lambda: int(sp())
fp=lambda: float(sp())
lp=lambda:list(map(int,stdin.readline().split()))
sp=lambda:stdin.readline().rstrip()
Yp=lambda:print('Yes')
Np=lambda:print('No')
inf = 1 << 60
inf1 = float('inf')
mod = 10 ** 9 + 7
#mod = 998244353
eps = 1e-9
sortkey1 = itemgetter(0)
sortkey2 = lambda x: (x[0], x[1])
###############################################################
A, B = lp()
A -= 1
def f(x):
y = str(x)
L = len(y)
dp = [[ 0 for _ in range(2)] for _ in range(L + 1)]
dp3 = [[[0 for _ in range(3)] for _ in range(2)] for _ in range(L + 1)]
dp8 = [[[0 for _ in range(8)] for _ in range(2)] for _ in range(L + 1)]
dp24 = [[[0 for _ in range(24)] for _ in range(2)] for _ in range(L + 1)]
dp[0][1] = 1
dp3[0][1][0] = 1
dp8[0][1][0] = 1
dp24[0][1][0] = 1
## xより小さいことが 0 => 確定している 1 => していない
for i in range(L):
now = int(y[i])
for dig in range(10):
if dig == 3:
continue
dp[i + 1][0] = (dp[i + 1][0] + dp[i][0]) % mod
for j in range(3):
dp3[i + 1][0][(j + dig) % 3] = (dp3[i + 1][0][(j + dig) % 3] + dp3[i][0][j]) % mod
for j in range(8):
dp8[i + 1][0][(j * 10 + dig) % 8] = (dp8[i + 1][0][(j * 10 + dig) % 8] + dp8[i][0][j]) % mod
for j in range(24):
dp24[i + 1][0][(j * 10 + dig) % 24] = (dp24[i + 1][0][(j * 10 + dig) % 24] + dp24[i][0][j]) % mod
for dig in range(now):
if dig == 3:
continue
dp[i + 1][0] = (dp[i + 1][0] + dp[i][1]) % mod
for j in range(3):
dp3[i + 1][0][(j + dig) % 3] = (dp3[i + 1][0][(j + dig) % 3] + dp3[i][1][j]) % mod
for j in range(8):
dp8[i + 1][0][(j * 10 + dig) % 8] = (dp8[i + 1][0][(j * 10 + dig) % 8] + dp8[i][1][j]) % mod
for j in range(24):
dp24[i + 1][0][(j * 10 + dig) % 24] = (dp24[i + 1][0][(j * 10 + dig) % 24] + dp24[i][1][j]) % mod
if now ==3:
continue
dp[i + 1][1] = (dp[i + 1][1] + dp[i][1]) % mod
for j in range(3):
dp3[i + 1][1][(j + now) % 3] = (dp3[i + 1][1][(j + now) % 3] + dp3[i][1][j]) % mod
for j in range(8):
dp8[i + 1][1][(j * 10 + now) % 8] = (dp8[i + 1][1][(j * 10 + now) % 8] + dp8[i][1][j]) % mod
for j in range(24):
dp24[i + 1][1][(j * 10 + now) % 24] = (dp24[i + 1][1][(j * 10 + now) % 24] + dp24[i][1][j]) % mod
res = x - (dp[L][0] + dp[L][1])
res += dp3[L][0][0] + dp3[L][1][0]
res -= x // 8 - (dp8[L][0][0] + dp8[L][1][0])
res -= dp24[L][0][0] + dp24[L][1][0]
res %= mod
return res
ans = f(B) - f(A)
ans %= mod
print(ans)
asumo0729