結果
問題 | No.1348 Split Tile |
ユーザー |
👑 ![]() |
提出日時 | 2021-01-16 14:30:22 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 413 ms / 2,000 ms |
コード長 | 1,193 bytes |
コンパイル時間 | 360 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 159,360 KB |
最終ジャッジ日時 | 2024-11-27 16:09:43 |
合計ジャッジ時間 | 8,225 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 26 |
ソースコード
"""各タイルに関して、取り除かれていないが、i-1番目は取り除かれているの場合の数を数え上げればよいt回操作終了後、自分が取り除かれていない & i-1番目が取り除かれている場合の数はC(N-1,t-1) * fac(t)左端に関しては、自分が取り除かれないだけ考えるC(N-1,t) * fac(t)後半の fac(N-t) もかければ終わり"""from sys import stdindef modfac(n, MOD):f = 1factorials = [1]for m in range(1, n + 1):f *= mf %= MODfactorials.append(f)inv = pow(f, MOD - 2, MOD)invs = [1] * (n + 1)invs[n] = invfor m in range(n, 1, -1):inv *= minv %= MODinvs[m - 1] = invreturn factorials, invsdef modnCr(n,r): #上で求めたfacとinvsを引数に入れるべし(上の関数で与えたnが計算できる最大のnになる)if n < r:return 0return fac[n] * inv[n-r] * inv[r] % modmod = 998244353N = int(stdin.readline())fac,inv = modfac(N+100,mod)ans = 0for t in range(1,N):ans += fac[N-t] * fac[t] * (modnCr(N-2,t-1) * (N-1) + modnCr(N-1,t))ans %= modprint (ans)