結果
問題 | No.2381 Gift Exchange Party |
ユーザー |
|
提出日時 | 2023-07-14 22:02:59 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 190 ms / 2,000 ms |
コード長 | 800 bytes |
コンパイル時間 | 3,843 ms |
コンパイル使用メモリ | 252,336 KB |
最終ジャッジ日時 | 2025-02-15 14:04:36 |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace std;using ll = long long;#define rep(i,n) for(int i=0;i<(int)(n);i++)using mint = atcoder::modint998244353;// combination MODconst int MOD=998244353;const int MAX_N=5e6;vector<mint> fac(MAX_N+1,1);vector<mint> finv(MAX_N+1,1);vector<ll> inv(MAX_N+1,1);void comb_setup(){for(int i=2;i<=MAX_N;i++){fac.at(i)=(fac.at(i-1)*i);inv.at(i)=MOD-(inv.at(MOD%i)*(MOD/i))%MOD;finv.at(i)=(finv.at(i-1)*inv.at(i));}}mint comb(ll n,ll k){if(n<k) return 0;return fac.at(n)*finv.at(n-k)*finv.at(k);}int main(){comb_setup();ll n,p;cin>>n>>p;mint ans=fac.at(n);for(ll i=0;i*p<=n;i++){mint tmp=comb(n,i*p);tmp*=fac.at(i*p);tmp*=finv.at(i);tmp/=mint(p).pow(i);ans-=tmp;}cout<<ans.val()<<endl;}