結果
| 問題 |
No.319 happy b1rthday 2 me
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-02-18 17:40:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 59 ms / 2,000 ms |
| コード長 | 2,544 bytes |
| コンパイル時間 | 587 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 65,024 KB |
| 最終ジャッジ日時 | 2025-02-18 17:40:18 |
| 合計ジャッジ時間 | 3,273 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 29 |
ソースコード
import sys
import math
import bisect
from heapq import heapify, heappop, heappush
from collections import deque, defaultdict, Counter
from functools import lru_cache
from itertools import accumulate, combinations, permutations, product
sys.set_int_max_str_digits(10 ** 6)
sys.setrecursionlimit(1000000)
MOD = 10 ** 9 + 7
MOD99 = 998244353
input = lambda: sys.stdin.readline().strip()
NI = lambda: int(input())
NMI = lambda: map(int, input().split())
NLI = lambda: list(NMI())
SI = lambda: input()
SMI = lambda: input().split()
SLI = lambda: list(SMI())
EI = lambda m: [NLI() for _ in range(m)]
def main():
A, B = SMI()
def f(X):
N = len(X)
# i桁見て j:lessで k:最後が1 l:12が何個あったか
dp = [[[[0]*(N+1) for _ in range(2)] for _ in range(2)] for _ in range(N+1)]
dp[0][0][0][0] = 1
for i in range(N):
s = int(X[i])
for j in range(2):
xmax = 9 if j else s
for k in range(2):
for l in range(N+1):
d = dp[i][j][k][l]
if d == 0:
continue
for x in range(xmax+1):
ni = i+1
if j == 0 and x == xmax:
nj = 0
else:
nj = 1
nk = 1 if x == 1 else 0
nl = l + int(k and x == 2)
# print(i, j, k, l, x, ni, nj, nk, nl)
dp[ni][nj][nk][nl] += d
res = 0
for j in range(2):
for k in range(2):
for l in range(N+1):
res += dp[N][j][k][l] * l
if int(X) >= 2:
res += 1
if int(X) <= 21:
return res
if int(X) <= 99:
return res + 1
if int(X[0]) >= 3:
for i in range(1, N-2+1):
res += 10**i
res += 1
elif int(X[0]) == 2:
for i in range(1, N - 3 + 1):
res += 10 ** i
res += int(X[1:-1]) + 1
if int(X[-1]) <= 1:
res -= 1
res += 1
else:
for i in range(1, N-3+1):
res += 10**i
res += 1
return res
fa = f(str(int(A)-1))
fb = f(B)
# print(fa, fb)
print(fb - fa - int(A[0] == "2" and A[-1] == "2"))
if __name__ == "__main__":
main()