結果

問題 No.3160 Party Game
ユーザー kmmtkm
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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)
0