結果
| 問題 |
No.1388 Less than K
|
| コンテスト | |
| ユーザー |
vwxyz
|
| 提出日時 | 2023-11-19 02:24:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,356 bytes |
| コンパイル時間 | 418 ms |
| コンパイル使用メモリ | 82,368 KB |
| 実行使用メモリ | 92,188 KB |
| 最終ジャッジ日時 | 2024-09-26 06:08:30 |
| 合計ジャッジ時間 | 45,705 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 73 TLE * 1 |
ソースコード
import sys
readline=sys.stdin.readline
H,W,K=map(int,readline().split())
H-=1;W-=1
K//=2
mod=998244353
fact=[1]+[i for i in range(1,H+W+1)]
for i in range(1,H+W+1):
fact[i]*=fact[i-1]
fact[i]%=mod
fact_inve=[i for i in range(1,H+W+1)]+[pow(fact[H+W],mod-2,mod)]
for i in range(H+W-1,-1,-1):
fact_inve[i]*=fact_inve[i+1]
fact_inve[i]%=mod
N=min(H,W)
ans=0
if K<=300:
for h in range(N+1):
if h:
prev=dp
dp=[0]*(2*K+1)
else:
dp=[0]*(2*K+1)
dp[K]=1
for w in range(max(h-K,0),min(h+K,N)+1):
if h and abs((h-1)-w)<=K:
dp[w-h+K]+=prev[w-(h-1)+K]
if w and abs(h-(w-1))<=K:
dp[w-h+K]+=dp[(w-1)-h+K]
dp[w-h+K]%=mod
ans+=fact[H+W]*fact_inve[H-h]%mod*fact_inve[W-h]%mod*fact_inve[2*h]%mod*dp[K]%mod
ans%=mod
else:
for cnt in range(N+1):
s=fact[2*cnt]*fact_inve[cnt]%mod*fact_inve[cnt]%mod
for i in range(1,cnt//(K+1)+1):
if i%2:
s-=2*fact[2*cnt]*fact_inve[cnt-(K+1)*i]%mod*fact_inve[cnt+(K+1)*i]%mod
else:
s+=2*fact[2*cnt]*fact_inve[cnt-(K+1)*i]%mod*fact_inve[cnt+(K+1)*i]%mod
s%=mod
ans+=fact[H+W]*fact_inve[H-cnt]%mod*fact_inve[W-cnt]%mod*fact_inve[2*cnt]%mod*s%mod
ans%=mod
print(ans)
vwxyz