結果
問題 | No.117 組み合わせの数 |
ユーザー | masa |
提出日時 | 2016-06-16 19:58:39 |
言語 | C++11 (gcc 11.4.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,138 bytes |
コンパイル時間 | 574 ms |
コンパイル使用メモリ | 63,668 KB |
実行使用メモリ | 12,412 KB |
最終ジャッジ日時 | 2024-10-09 16:35:24 |
合計ジャッジ時間 | 13,032 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:59:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 59 | scanf("%d\n", &t); | ~~~~~^~~~~~~~~~~~ main.cpp:61:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 61 | scanf("%c(%d,%d)\n", &c, &n, &k); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <utility> using namespace std; const int mod = 1e9 + 7; int calc_p(int n, int k) { if (n < k) { return 0; } long long ret = 1; for (int i = 0; i < k; i++) { ret = ret * (n - i) % mod; } return ret; } int calc_c(int n, int k) { if (n < k) { return 0; } k = min(k, n - k); vector<int> factor; for (int i = 0; i < k; i++) { factor.emplace_back(n - i); } for (int i = k; i > 1; i--) { for (int j = factor.size() - 1; j >= 0; j--) { if (factor[j] % i == 0) { factor[j] /= i; break; } } } long long ret = 1; for (auto e : factor) { ret = ret * e % mod; } return ret; } int calc_h(int n, int k) { return calc_c(n - 1 + k, k); } int main() { int t, n, k, ans; char c; scanf("%d\n", &t); for (int i = 0; i < t; i++) { scanf("%c(%d,%d)\n", &c, &n, &k); switch (c) { case 'P': ans = calc_p(n, k); break; case 'C': ans = calc_c(n, k); break; case 'H': ans = calc_h(n, k); break; default: break; } // printf("%d: %d%c%d = %d\n", i, n, c, k, ans); printf("%d\n", ans); } return 0; }