結果
| 問題 | No.3160 Party Game |
| コンテスト | |
| ユーザー |
mint
|
| 提出日時 | 2026-09-29 20:42:43 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 41 ms / 2,000 ms |
| + 214µs | |
| コード長 | 1,206 bytes |
| 記録 | |
| コンパイル時間 | 4,905 ms |
| コンパイル使用メモリ | 356,332 KB |
| 実行使用メモリ | 46,396 KB |
| 最終ジャッジ日時 | 2026-09-29 20:43:04 |
| 合計ジャッジ時間 | 8,510 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 38 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/modint>
using namespace std;
using mint = atcoder::modint998244353;
const int MAXX = 3e6;
mint fac[MAXX], finv[MAXX], inv[MAXX];
void TTT(){
const int MOD = mint::mod();
fac[0] = fac[1] = 1;
finv[0] = finv[1] = 1;
inv[1] = 1;
for(int i = 2; i < MAXX; ++i){
fac[i] = fac[i-1]*i;
inv[i] = MOD - inv[MOD%i]*(MOD/i);
finv[i] = finv[i-1] * inv[i];
}
}
mint com(int n, int r){
if(n < r) return 0;
if(n < 0 || r < 0) return 0;
return fac[n] * finv[r] * finv[n - r];
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
TTT();
int n, m; cin >> n >> m;
// 以上の場合
vector<mint> ijyou(m+1);
for(int i = 0; i <= m; ++i){
if(i*n > m) break;
ijyou[i] = com(m - i*n + n, n);
}
// (n = 1 or x = 0) : -n
if(n == 1){
for(int i = 0; i <= m; ++i) ijyou[i] -= n;
}else{
ijyou[0] -= n;
}
// ちょうど x の個数
vector<mint> cho(m);
for(int i = 0; i < m; ++i){
cho[i] = ijyou[i] - ijyou[i+1];
}
mint z = 0;
for(int i = 0; i < m; ++i){
z += i * cho[i];
}
z /= ijyou[0];
cout << z.val() << '\n';
return 0;
}
// サンプル 3 は物理好きさんの誕生日だ~~~~!
mint