結果
| 問題 |
No.117 組み合わせの数
|
| ユーザー |
404Mao
|
| 提出日時 | 2018-09-27 17:32:54 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 333 ms / 5,000 ms |
| コード長 | 1,271 bytes |
| コンパイル時間 | 1,440 ms |
| コンパイル使用メモリ | 171,064 KB |
| 実行使用メモリ | 50,064 KB |
| 最終ジャッジ日時 | 2024-10-12 04:30:04 |
| 合計ジャッジ時間 | 2,404 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
#pragma warning(disable:4996)
#include <bits/stdc++.h>
using namespace std;
template<typename Int>
class Combination {
vector<Int> fact, factr, inv;
Int mod;
inline void init(int _N) {
fact.resize(_N + 1); factr.resize(_N + 1); inv.resize(_N + 1);
inv[1] = fact[0] = factr[0] = 1;
for (int i = 2; i <= _N; ++i) inv[i] = inv[mod % i] * (mod - mod / i) % mod;
for (int i = 1; i <= _N; ++i) fact[i] = fact[i - 1] * i%mod, factr[i] = factr[i - 1] * inv[i] % mod;
}
public:
Combination(Int _mod, int _N) {
mod = _mod;
init(_N);
}
Int C(Int N_, Int R_) {
if (R_<0 || R_>N_) return 0;
return factr[R_] * fact[N_] % mod*factr[N_ - R_] % mod;
}
Int P(Int N_, Int R_) {
if (R_<0 || R_>N_) return 0;
return fact[N_] * factr[N_ - R_] % mod;
}
Int H(int N_, int R_) {
if (N_ == 0 && R_ == 0) return 1;
return C(N_ + R_ - 1, R_);
}
};
int main(void) {
int T;
cin >> T;
Combination<long long> comb(1'000'000'007, 2'000'100);
for (int i = 0; i < T; ++i) {
char c; long long N, K;
cin >> c;
cin.ignore();
cin >> N;
cin.ignore();
cin >> K;
cin.ignore();
if (c == 'C') {
cout << comb.C(N, K) << endl;
}
else if (c == 'P') {
cout << comb.P(N, K) << endl;
}
else {
cout << comb.H(N, K) << endl;
}
}
return 0;
}
404Mao