結果
問題 | No.117 組み合わせの数 |
ユーザー |
![]() |
提出日時 | 2016-06-02 00:46:48 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 224 ms / 5,000 ms |
コード長 | 1,429 bytes |
コンパイル時間 | 1,522 ms |
コンパイル使用メモリ | 67,796 KB |
実行使用メモリ | 11,008 KB |
最終ジャッジ日時 | 2024-10-08 05:13:10 |
合計ジャッジ時間 | 1,719 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 1 |
ソースコード
#include <iostream>#include <vector>#include <map>#include <algorithm>using namespace std;#define REP(i,s,e) for (i = s; i <= e; i++)#define rep(i,n) REP (i,0,(int)(n)-1)#define RREP(i,s,e) for (i = s; i >= e; i--)#define rrep(i,n) RREP (i,(int)(n)-1,0)#define INF (int)1e8#define MOD (int)(1e9+7)typedef long long ll;int frac[2000100];int inv(ll x) {int n = MOD-2;ll ret = 1;while (n > 0) {if (n % 2) ret *= x, ret %= MOD;x *= x;x %= MOD;n /= 2;}return ret;}int C(int n, int k) {if (n < k)return 0;elsereturn 1LL * frac[n] * inv(frac[k]) % MOD * inv(frac[n-k]) % MOD;}int P(int n, int k) {if (n < k)return 0;elsereturn 1LL * frac[n] * inv(frac[n-k]) % MOD;}int H(int n, int k) {if (n == 0) {if (k == 0)return 1;elsereturn 0;}elsereturn C(n+k-1,k);}int main(void) {int t;ll i;frac[0] = 1;REP (i,1,2000000) frac[i] = (frac[i-1] * i) % MOD;cin >> t;while (t--) {string s;int n, k;size_t pos;cin >> s;n = stoi(s.substr(2),&pos);k = stoi(s.substr(3+pos));if (s[0] == 'C') cout << C(n,k) << endl;else if (s[0] == 'P') cout << P(n,k) << endl;else if (s[0] == 'H') cout << H(n,k) << endl;}return 0;}