結果
問題 | No.117 組み合わせの数 |
ユーザー | ctyl_0 |
提出日時 | 2015-08-30 23:20:40 |
言語 | C++11 (gcc 11.4.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,021 bytes |
コンパイル時間 | 693 ms |
コンパイル使用メモリ | 83,164 KB |
実行使用メモリ | 10,992 KB |
最終ジャッジ日時 | 2024-07-18 15:41:43 |
合計ジャッジ時間 | 1,825 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ソースコード
#include <iostream> #include <iomanip> #include <vector> #include <algorithm> #include <numeric> #include <functional> #include <cmath> #include <queue> #include <stack> #define repd(i,a,b) for (int i=(a);i<(b);i++) #define rep(i,n) repd(i,0,n) #define PRIME 1000000007 typedef long long ll; using namespace std; ll f[1000001]; int inputValue(){ int a; cin >> a; return a; }; void inputArray(int * p, int a){ rep(i, a){ cin >> p[i]; } }; void inputVector(vector<int> * p, int a){ rep(i, a){ int input; cin >> input; p -> push_back(input); } } template <typename T> void output(T a, int precision) { if(precision > 0){ cout << setprecision(precision) << a << "\n"; } else{ cout << a << "\n"; } } ll power(ll a, int p, int mod){ if (p == 0) return 1; if (p % 2 == 1){ return a * power(a, p - 1, mod) % mod; } long long c = power(a, p / 2, mod); return c * c % mod; } ll inverse(ll a, int mod){ return power(a, mod - 2, mod); } ll combination(int n, int k, int mod){ if (n < k) return 0; ll temp = f[n] * inverse(f[k], mod) % mod; return temp * inverse(f[n - k], mod) % mod; } ll permutation(int n, int k, int mod){ if (n < k) return 0; return f[n] * inverse(f[n - k], mod) % mod; } ll homogeneous(int n, int k, int mod){ return combination(n + k - 1, k, mod); } int main(int argc, const char * argv[]) { f[0] = 1; repd(i, 1, 1000001){ f[i] = f[i - 1] * i % PRIME; } // source code int T = inputValue(); rep(i, T){ char c; cin >> c; cin.ignore(); int N = inputValue(); cin.ignore(); int K = inputValue(); cin.ignore(); if(c == 'C') output(combination(N, K, PRIME), 0); if(c == 'P') output(permutation(N, K, PRIME), 0); if(c == 'H') output(homogeneous(N, K, PRIME), 0); } return 0; }