結果
| 問題 |
No.117 組み合わせの数
|
| コンテスト | |
| ユーザー |
mizunomidori
|
| 提出日時 | 2016-07-03 20:43:36 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,352 bytes |
| コンパイル時間 | 633 ms |
| コンパイル使用メモリ | 74,772 KB |
| 実行使用メモリ | 12,184 KB |
| 最終ジャッジ日時 | 2024-10-12 19:57:15 |
| 合計ジャッジ時間 | 1,582 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 1 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:57:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
57 | scanf("%c%c%d%c%d%c%c", &c, &dummy, &N, &dummy, &K, &dummy, &dummy);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <ctime>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>
#include <numeric>
#include <string>
#define MOD 1000000007
#define N_MAX 1000000
using namespace std;
typedef long long ll;
ll modpow(ll a, ll n)
{
ll ret = 1;
while (n) {
if (n & 1) {
ret = (ret * a) % MOD;
}
a = (a * a) % MOD;
n >>= 1;
}
return ret;
}
ll modinv(ll a)
{
return modpow(a, MOD - 2);
}
int main(void)
{
ll *factorial = new ll [N_MAX + 1];
factorial[0] = 1;
for (int i = 1; i <= N_MAX; i++) {
factorial[i] = (i * factorial[i - 1]) % MOD;
}
int T;
cin >> T;
getchar();
while (T--) {
char c, dummy;
int N, K;
ll ret;
scanf("%c%c%d%c%d%c%c", &c, &dummy, &N, &dummy, &K, &dummy, &dummy);
if (c == 'H') {
N = max(0, N + K - 1);
}
if (K <= N) {
ret = factorial[N] * modinv(factorial[N - K]) % MOD;
if (c != 'P') {
ret = (ret * modinv(factorial[K])) % MOD;
}
} else {
ret = 0;
}
printf("%lld\n", ret);
}
return 0;
}
mizunomidori