結果
問題 | No.2703 FizzBuzz Letter Counting |
ユーザー |
|
提出日時 | 2024-02-07 09:32:29 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 570 ms / 3,000 ms |
コード長 | 1,873 bytes |
コンパイル時間 | 353 ms |
コンパイル使用メモリ | 82,112 KB |
実行使用メモリ | 117,120 KB |
最終ジャッジ日時 | 2024-09-30 15:10:38 |
合計ジャッジ時間 | 27,013 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 60 |
ソースコード
MOD=998244353def matrix_mul(a,b,MOD=None):ret=[[0]*len(b[0]) for i in range(len(a))]for i in range(len(a)):for j in range(len(b[0])):for k in range(len(b)):ret[i][j]+=a[i][k]*b[k][j]if MOD:ret[i][j]%=MODreturn retdef matrix_pow(x,p,MOD=None):if p==0:for i in range(len(x)):for j in range(len(x)):if i==j:x[i][j]=1else:x[i][j]=0return xif p==1:return xif p%2==1:return matrix_mul(matrix_pow(x,p-1,MOD),x,MOD)half=matrix_pow(x,p//2,MOD)return matrix_mul(half,half,MOD)def rep(x):return (giant_r[x//backet]*baby[x%backet]+baby_r[x%backet])%(MOD*15)def power(x):return (giant[x//backet]*baby[x%backet])%(MOD*15)backet=1000000baby=[1]*(backet+1)for i in range(backet):baby[i+1]=(baby[i]*10)%(MOD*15)giant=[1]*(backet+1)for i in range(backet):giant[i+1]=(giant[i]*baby[-1])%(MOD*15)baby_r=[0]*(backet+1)for i in range(backet):baby_r[i+1]=(baby_r[i]*10+1)%(MOD*15)giant_r=[0]*(backet+1)for i in range(backet):giant_r[i+1]=(giant_r[i]*baby[-1]+baby_r[-1])%(MOD*15)M=int(input())num=[tuple(map(int,input().split())) for i in range(M)]S=0N=0for v,l in num:S+=lN*=pow(10,l,MOD*15)N+=rep(l)*vN%=MOD*15if S<=1:ans=0for i in range(1,N+1):if i%15==0:ans+=8elif i%5==0:ans+=4elif i%3==0:ans+=4else:ans+=len(str(i))print(ans)exit()bet=matrix_pow([[10,10,0],[0,10,0],[1,4,1]],S-2,MOD)[-1]bet[0]*=96bet[1]*=48bet[2]*=0fb=[8,S,S,4,S,4,4,S,S,4,4,S,4,S,S]sz=(N+1-pow(10,S-1,MOD*15))%(MOD*15)ans=sum(bet)+(8*S+32)*(sz//15)+21for i in range(sz%15):ans+=fb[(i+10)%15]print(ans%MOD)