結果
| 問題 |
No.117 組み合わせの数
|
| ユーザー |
tubo28
|
| 提出日時 | 2015-01-05 02:18:39 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,406 bytes |
| コンパイル時間 | 593 ms |
| コンパイル使用メモリ | 56,292 KB |
| 実行使用メモリ | 28,612 KB |
| 最終ジャッジ日時 | 2024-06-13 02:40:44 |
| 合計ジャッジ時間 | 1,401 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 1 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:67:18: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
67 | scanf("\n%c(%d,%d)",&c,&N,&K);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <iostream>
using namespace std;
typedef long long ll;
ll const mod = 1000000007;
int const MAX_N = 3000000;
ll fact[MAX_N+1];
void build_factrial(){
fact[0] = fact[1] = 1;
for(ll i = 1; i < MAX_N; i++){
fact[i+1] = fact[i]*(i+1)%mod;
}
}
ll extgcd(ll a, ll b, ll& x, ll& y) {
ll d = a;
if(b != 0){
d = extgcd(b,a%b,y,x);
y -= (a/b)*x;
} else {
x=1; y=0;
}
return d;
}
ll inv_[MAX_N+1];
void build_inverse(){
inv_[1] = 1;
for(int i = 2; i <= MAX_N; i++){
inv_[i] = inv_[mod%i]*(mod-mod/i)%mod;
}
}
ll mod_inverse(ll n, ll m) {
ll x, y;
extgcd(n, m, x, y);
return (m+x%m) % m;
}
ll inv(ll n){
if(n <= MAX_N) return inv_[n];
return mod_inverse(n,mod);
}
ll nPr(ll n, ll r){
if(r < 0 || n < r) return 0;
return fact[n] * inv(fact[n-r]) % mod;
}
ll nCr(ll n, ll r){
if(r < 0 || n < r) return 0;
return nPr(n,r) * inv(fact[r]) % mod;
}
ll nHr(ll n, ll r){
if(n==0 && r==0) return 1;
return nCr(n+r-1,r);
}
int main(){
// build_inverse();
build_factrial();
int T;
while(cin >> T){
for(int i=0;i<T;i++){
char c; int N, K;
scanf("\n%c(%d,%d)",&c,&N,&K);
if(c=='C') cout << nCr(N,K);
if(c=='P') cout << nPr(N,K);
if(c=='H') cout << nHr(N,K);
cout << endl;
}
}
}
tubo28