結果
問題 |
No.3160 Party Game
|
ユーザー |
|
提出日時 | 2025-05-18 17:47:25 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 881 ms / 2,000 ms |
コード長 | 1,181 bytes |
コンパイル時間 | 500 ms |
コンパイル使用メモリ | 82,712 KB |
実行使用メモリ | 215,212 KB |
最終ジャッジ日時 | 2025-05-27 21:56:42 |
合計ジャッジ時間 | 8,542 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
MOD = 998244353 n, m = map(int, input().split()) factorial = [1] for i in range(1, n + m + 10): factorial.append(factorial[-1] * i % MOD) def combination(n, k): return factorial[n] * pow(factorial[n-k], -1, MOD) * pow(factorial[k], -1, MOD) # スコア = p となる場合の数を数える # スコア >= p <=> p <= pi <= M - 1 and \sum pi <= M # <=> 0 <= pi - p <= M - 1 - p and \sum (pi - p) <= M - pN # M - pN 個のボールをN+1 人に分配 (1人はダミー) # スコア >= p となるパターンの数 patterns = [] # スコア = 0 となる場合の数 # Mがダメなことに注意 # 誰かがMになるとき、他は全員0 patterns.append( combination(m+n, m) - n ) for p in range(1, m): if m - p * n < 0: patterns.append(0) break # スコア >= 1 のときは、pi >= M となることはない patterns.append(combination(m-p*n+n, n)) comb_all = 0 for i in range(len(patterns) - 1): comb_all += patterns[i] - patterns[i+1] if comb_all == 0: print(0) exit() comb_all_inv = pow(comb_all, -1, MOD) ans = 0 for p in range(1, len(patterns)-1): ans += p * (patterns[p] - patterns[p+1]) * comb_all_inv ans %= MOD print(ans)