結果
問題 | No.117 組み合わせの数 |
ユーザー | silopy |
提出日時 | 2019-07-09 22:22:02 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,009 bytes |
コンパイル時間 | 660 ms |
コンパイル使用メモリ | 74,992 KB |
実行使用メモリ | 61,568 KB |
最終ジャッジ日時 | 2024-10-12 18:21:36 |
合計ジャッジ時間 | 1,545 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ソースコード
#include<cstdio> #include<iostream> #include<algorithm> #include<vector> #include<tuple> using namespace std; using lint=int64_t; const lint mod=1e9+7; int main() { const int MAX=2e6+10; vector<lint> fac(MAX,1); vector<lint> inv(MAX,1); vector<lint> finv(MAX,1); for(lint i=2;i<MAX;i++) { fac[i]=i*fac[i-1]%mod; inv[i]=mod-(mod/i)*inv[mod%i]%mod; finv[i]=inv[i]*finv[i-1]%mod; } auto C=[&fac,&inv,&finv](lint n,lint r) { if(n<r || n<0 || r<0)return (lint)0; return fac[n]*(finv[r]*finv[n-r]%mod)%mod; }; auto P=[&fac,&inv,&finv,&C](lint n,lint r) { return fac[r]*C(n,r)%mod; }; auto H=[&fac,&inv,&finv,&C](lint n,lint r) { return C(n+r-1,r); }; //main int T; char c[100010][100]; lint n[100010]; lint k[100010]; cin >> T; for(int i=0;i<T;i++) scanf("%1s(%lld,%lld)",c[i],&n[i],&k[i]); for(int i=0;i<T;i++) { if(c[i][0]=='C')cout << C(n[i],k[i]); if(c[i][0]=='P')cout << P(n[i],k[i]); if(c[i][0]=='H')cout << H(n[i],k[i]); cout << endl; } return 0; }