結果
| 問題 | No.2857 Div Array |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-07-19 08:31:21 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 140 ms / 2,000 ms |
| + 499µs | |
| コード長 | 1,176 bytes |
| 記録 | |
| コンパイル時間 | 508 ms |
| コンパイル使用メモリ | 95,984 KB |
| 実行使用メモリ | 84,352 KB |
| 最終ジャッジ日時 | 2026-07-19 08:31:27 |
| 合計ジャッジ時間 | 4,895 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 |
ソースコード
from bisect import bisect_left,bisect_right
MOD = 998244353
N,M,K = map(int,input().split())
A = set()
C = {}
for i in range(1,M+1):
A.add(M//i)
C[M//i] = C.get(M//i,0)+1
A = sorted(list(A))
C = sorted(list(C.items()),key=lambda x:x[0])
C = [C[i][1] for i in range(len(C))]
W = len(A)
T = [[0 for _ in range(W)] for _ in range(W)]
for j in range(W):
indl = bisect_left(A,A[j]-K)
indr = bisect_right(A,A[j]+K)
for i in range(indl,indr):
T[i][j] = C[j]
def matmul(A,B):
C = [[0 for _ in range(W)] for _ in range(W)]
for i in range(W):
for j in range(W):
for k in range(W):
C[i][j] = (C[i][j]+A[i][k]*B[k][j])%MOD
return C
I = [[0 for _ in range(W)] for _ in range(W)]
for i in range(W):
I[i][i] = 1
def matpow(A,n):
if n==0:
return I
if n==1:
return A
B = matpow(A,n//2)
if n%2==0:
return matmul(B,B)
return matmul(A,matmul(B,B))
P1 = [C[i] for i in range(W)]
TN = matpow(T,N-1)
PN = [0 for _ in range(W)]
for j in range(W):
for k in range(W):
PN[j] = (PN[j]+P1[k]*TN[k][j])%MOD
ans = 0
for i in range(W):
ans = (ans+PN[i])%MOD
print(ans)