結果
問題 | No.1388 Less than K |
ユーザー |
![]() |
提出日時 | 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)