結果

問題 No.117 組み合わせの数
ユーザー pekempeypekempey
提出日時 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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0