結果
| 問題 |
No.117 組み合わせの数
|
| ユーザー |
|
| 提出日時 | 2015-01-04 23:49:59 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,308 bytes |
| コンパイル時間 | 553 ms |
| コンパイル使用メモリ | 57,408 KB |
| 実行使用メモリ | 11,364 KB |
| 最終ジャッジ日時 | 2024-06-13 02:25:30 |
| 合計ジャッジ時間 | 1,382 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 1 |
コンパイルメッセージ
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] = 1LL * factorial[i - 1] * i % MOD;
}
void read() {
scanf(" %c(%d,%d)", &ch, &N, &K);
}
int nCk(int n, int k) {
return mul(factorial[n], mul(inv(factorial[n - k]), inv(factorial[k])));
}
int nPk(int n, int k) {
return mul(factorial[n], inv(factorial[n - k]));
}
int nHk(int n, int k) {
return nCk(n + k - 1, k);
}
void work() {
if (ch != 'H' && N < K) {
cout << 0 << endl;
return;
}
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;
}