結果

問題 No.389 ロジックパズルの組み合わせ
ユーザー wing3196wing3196
提出日時 2016-07-08 23:01:06
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 63 ms / 2,000 ms
コード長 741 bytes
コンパイル時間 1,212 ms
コンパイル使用メモリ 161,472 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-10-13 06:28:26
合計ジャッジ時間 4,319 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 99
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int MOD = 1000000000 + 7;

int Factorial(int n)
{
	int res = 1;
	while (n) (res *= n--) %= MOD;
	return res;
}

int Pow(int x, int n)
{
	if (n == 0) return 1;
	int res = Pow(x*x % MOD, n/2);
	if (n&1) res *= x;
	return res % MOD;
}

int Inverse(int n)
{
	return Pow(n, MOD - 2);
}

int H(int ball, int stick)
{
	return Factorial(ball + stick) * Inverse(Factorial(ball) * Factorial(stick) % MOD) % MOD;
}

int M;

signed main()
{
	cin >> M;
	int h, sum = 0, N = 0;
	while (cin >> h)
	{
		sum += h;
		N++;
	}
	if (h == 0) sum = 0, N = 0;
	if (sum + N - 1 > M)
	{
		puts("NA");
		return 0;
	}
	int n = M - (sum + N - 1), k = N;
	printf("%lld\n", H(n, k));
	return 0;
}
0