結果

問題 No.3160 Party Game
コンテスト
ユーザー mint
提出日時 2026-09-29 20:42:43
言語 C++23(gcc16)
(gcc 16.1.0 + boost 1.92.0 + ACL)
コンパイル:
g++-16 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 41 ms / 2,000 ms
+ 214µs
コード長 1,206 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#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 は物理好きさんの誕生日だ~~~~!
0