結果
| 問題 |
No.2951 Similar to Mex
|
| コンテスト | |
| ユーザー |
ゼット
|
| 提出日時 | 2024-10-25 22:52:07 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 839 ms / 2,000 ms |
| コード長 | 1,288 bytes |
| コンパイル時間 | 363 ms |
| コンパイル使用メモリ | 82,356 KB |
| 実行使用メモリ | 302,664 KB |
| 最終ジャッジ日時 | 2024-10-25 22:52:33 |
| 合計ジャッジ時間 | 24,867 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 42 |
ソースコード
N,M,K=map(int,input().split())
#dp[i][j][k] 数字iまで見た、j種類使用、溜め込みk個
X=max(N,M,K)
dp=[[[0]*(X+1) for j in range(X+1)] for i in range(X+2)]
dp[0][0][0]=1
v=[[1]*(X+1) for i in range(X+2)]
mod=998244353
for i in range(X+2):
for j in range(1,X+1):
v[i][j]=v[i][j-1]*i
v[i][j]%=mod
for i in range(X+1):
for j in range(i+1):
for k in range(i+1):
if dp[i][j][k]==0:
continue
if i<M:
if i<K:
dp[i+1][j+1][k+1]+=dp[i][j][k]
dp[i+1][j+1][k+1]%=mod
else:
dp[i+1][j+1][k]+=dp[i][j][k]
dp[i+1][j+1][k]%=mod
if i<K:
dp[i+1][j][0]+=dp[i][j][k]*v[i+1][k+1]
dp[i+1][j][0]%=mod
else:
dp[i+1][j][0]+=dp[i][j][k]*v[i+1][k]
dp[i+1][j][0]%=mod
u=[1]*(2*10**5)
for i in range(1,2*10**5):
u[i]=u[i-1]*i
u[i]%=mod
u2=[1]*(2*10**5)
for i in range(1,2*10**5):
u2[i]=pow(u[i],-1,mod)
def ncm(x,y):
ans=u[x]*u2[y]
ans%=mod
ans*=u2[x-y]
ans%=mod
return ans
result=0
q=[[0]*(N+1) for i in range(N+1)]
q[0][0]=1
for i in range(N):
for j in range(i,N):
for k in range(1,N+1):
if j+k>N:
break
q[i+1][j+k]+=q[i][j]*ncm(N-j,k)
q[i+1][j+k]%=mod
result+=dp[X+1][i+1][0]*q[i+1][N]
result%=mod
print(result)
ゼット