結果

問題 No.3242 Count 8 Included Numbers (Hard)
ユーザー titia
提出日時 2025-08-23 01:39:50
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
TLE  
実行時間 -
コード長 1,237 bytes
コンパイル時間 1,814 ms
コンパイル使用メモリ 12,160 KB
実行使用メモリ 190,848 KB
最終ジャッジ日時 2025-08-23 01:39:56
合計ジャッジ時間 6,052 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 1 TLE * 1 -- * 18
権限があれば一括ダウンロードができます

ソースコード

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
    if keta==1:
        x=int(N[:keta+1])-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