結果

問題 No.3242 Count 8 Included Numbers (Hard)
ユーザー titia
提出日時 2025-08-23 01:40:17
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,370 ms / 2,000 ms
コード長 1,192 bytes
コンパイル時間 748 ms
コンパイル使用メモリ 82,012 KB
実行使用メモリ 236,460 KB
最終ジャッジ日時 2025-08-23 01:40:39
合計ジャッジ時間 20,598 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = sys.stdin.readline

sys.setrecursionlimit(10**7)
sys.set_int_max_str_digits(10**7)

mod=998244353

N=input().strip()

DP=[[-1]*2 for i in range(len(N)+1)]

def calc(keta,minus):
    if DP[keta][minus]!=-1:
        return DP[keta][minus]
    if keta==0:
        x=int(N[0])-minus
        if x<8:
            return 0
        if x==8 or x==9:
            return 1

    x=int(N[keta])-minus

    if x-8<0:
        ANS=calc2(keta-1,1)
    else:
        ANS=calc2(keta-1,0)

    for i in [0,1,2,3,4,5,6,7,9]:
        if x-i<0:
            ANS+=calc(keta-1,1)
        else:
            ANS+=calc(keta-1,0)
            
        ANS%=mod

    DP[keta][minus]=ANS
    return ANS

DP2=[[-1]*2 for i in range(len(N)+1)]

def calc2(keta,minus):
    if DP2[keta][minus]!=-1:
        return DP2[keta][minus]
    
    if keta==0:
        x=int(N[keta])-minus
        return x+1

    x=int(N[keta])-minus
    ANS=0

    for i in range(10):
        if x-i<0:
            ANS+=calc2(keta-1,1)
        else:
            ANS+=calc2(keta-1,0)

        ANS%=mod

    DP2[keta][minus]=ANS
    return ANS

for i in range(1,len(N)):
    calc(i,0)
            
        

print(calc(len(N)-1,0)%mod)
0