結果
問題 | No.117 組み合わせの数 |
ユーザー | Hachimori |
提出日時 | 2015-01-05 00:06:05 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 237 ms / 5,000 ms |
コード長 | 1,365 bytes |
コンパイル時間 | 1,068 ms |
コンパイル使用メモリ | 57,640 KB |
実行使用メモリ | 11,264 KB |
最終ジャッジ日時 | 2024-06-13 02:30:48 |
合計ジャッジ時間 | 1,683 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
コンパイルメッセージ
main.cpp: In function ‘void read()’: main.cpp:35:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 35 | scanf(" %c(%d,%d)", &ch, &N, &K); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<iostream> #include<cstdio> using namespace std; const int BUF = 2000005; const int MOD = 1000000007; int mul(int a, int b) { return 1LL * a * b % MOD; } int modpow(int p, int n) { if (n == 0) return 1; int t = modpow(p, n / 2); return n & 1 ? mul(t, mul(t, p)) : mul(t, t); } int inv(int v) { return modpow(v, MOD - 2); } char ch; int N, K; int factorial[BUF]; void makeTable() { factorial[0] = 1; for (int i = 1; i < BUF; ++i) factorial[i] = mul(factorial[i - 1], i); } void read() { scanf(" %c(%d,%d)", &ch, &N, &K); } int nCk(int n, int k) { if (n < 0 || k < 0 || n - k < 0) return 0; return mul(factorial[n], mul(inv(factorial[n - k]), inv(factorial[k]))); } int nPk(int n, int k) { if (n < 0 || k < 0 || n - k < 0) return 0; return mul(factorial[n], inv(factorial[n - k])); } int nHk(int n, int k) { if (n == 0 && k == 0) return 1; return nCk(n + k - 1, k); } void work() { switch(ch) { case 'C': cout << nCk(N, K) << endl; break; case 'P': cout << nPk(N, K) << endl; break; case 'H': cout << nHk(N, K) << endl; break; } } int main() { makeTable(); int cases; cin >> cases; for (int i = 0; i < cases; ++i) { read(); work(); } return 0; }