結果
問題 | No.117 組み合わせの数 |
ユーザー | pekempey |
提出日時 | 2015-08-18 20:08:58 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,263 bytes |
コンパイル時間 | 1,413 ms |
コンパイル使用メモリ | 163,344 KB |
実行使用メモリ | 19,012 KB |
最終ジャッジ日時 | 2024-07-18 10:14:56 |
合計ジャッジ時間 | 1,985 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ソースコード
#include <bits/stdc++.h> #define rep(i, a) for (int i = 0; i < (a); i++) #define rep2(i, a, b) for (int i = (a); i < (b); i++) #define repr(i, a) for (int i = (a) - 1; i >= 0; i--) #define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--) using namespace std; typedef long long ll; const ll inf = 1e9; const ll mod = 1e9 + 7; ll fact[2000000]; ll modpow(ll a, ll b) { ll res = 1; while (b > 0) { if (b & 1) (res *= a) %= mod; (a *= a) %= mod; b >>= 1; } return res; } ll modinv(ll a) { return modpow(a, mod - 2); } ll modP(ll a, ll b) { if (a < b) return 0; return fact[a] * modinv(fact[a - b]) % mod; } ll modC(ll a, ll b) { if (b < 0 || a < b) return 0; return modP(a, b) * modinv(fact[b]) % mod; } ll modH(ll a, ll b) { return modC(a + b - 1, b); } int main() { fact[0] = 1; rep2 (i, 1, 2000000) { fact[i] = (i * fact[i - 1]) % mod; } int T; cin >> T; while (T--) { string S; cin >> S; char c = S[0]; S = S.substr(2, S.length() - 3); *find(S.begin(), S.end(), ',') = ' '; istringstream iss(S); int a, b; iss >> a >> b; ll ans = 0; if (c == 'C') { ans = modC(a, b); } else if (c == 'P') { ans = modP(a, b); } else if (c == 'H') { ans = modH(a, b); } cout << ans << endl; } return 0; }