結果
| 問題 | No.3394 Big Binom |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-12-11 22:20:22 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 1,497 ms / 2,000 ms |
| コード長 | 1,449 bytes |
| 記録 | |
| コンパイル時間 | 1,784 ms |
| コンパイル使用メモリ | 196,000 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2025-12-14 20:04:18 |
| 合計ジャッジ時間 | 13,092 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 22 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define ERASE(vec,s,e) vec.erase(vec.begin()+s, vec.begin()+e)
#define ALL(v) (v).begin(), (v).end()
#define CIN(v,n) for(int i=0; i<(n); i++) cin >> v[i]
const int MOD=998244353;
long long modpow(long long a,long long n,long long mod){
long long res=1;
a%=mod;
while(n>0){
if(n&1)res=res*a%mod;
a=a*a%mod;
n>>=1;
}
return res;
}
long long modinv(long long a,long long mod){
return modpow(a,mod-2,mod);
}
int main(){
const int MOD=998244353;
vector<int> factorial={1,808258749,117153405,761699708,573994984,62402409,511621808,242726978,887890124,875880304,0};
int N,K;
cin>>N>>K;
K=min(K,N-K);
N%=MOD;
if(N<K){
cout<<0;
return 0;
}
int N_K=N-K;
int n=N/100000000;
int k=K/100000000;
int n_k=N_K/100000000;
ll b=factorial[n];
ll a1=factorial[k];
ll a2=factorial[n_k];
int nl=n*100000000+1;
int k1l=k*100000000+1;
int k2l=n_k*100000000+1;
for(int i=nl;i<=N;i++){
b*=i;
b%=998244353;
}
for(int i=k1l;i<=K;i++){
a1*=i;
a1%=998244353;
if(a1==0){
cout<<0;
return 0;
}
}
for(int i=k2l;i<=N_K;i++){
a2*=i;
a2%=998244353;
if(a2==0){
cout<<0;
return 0;
}
}
cout<<(b*modinv(a1*a2,998244353))%MOD;
}