結果

問題 No.498 ワープクリスタル (給料日編)
ユーザー ei1333333
提出日時 2017-03-24 23:04:22
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 27 ms / 2,000 ms
コード長 2,040 bytes
コンパイル時間 1,581 ms
コンパイル使用メモリ 167,404 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-07-05 23:13:36
合計ジャッジ時間 2,836 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
using namespace std;
typedef long long int64;
const int mod = 1e9 + 7;
inline int64 modPow(int64 x, int64 n)
{
if(n == 0) return (1);
int64 ret = modPow(x, n / 2);
(ret *= ret) %= mod;
if(n & 1) (ret *= x) %= mod;
return (ret);
}
inline int64 modInv(int64 a)
{
return (modPow(a, mod - 2));
}
inline int64 modCombination(int p, int q)
{
static int64 fact[202020], rfact[202020];
if(fact[0] == 0) {
fact[0] = rfact[0] = 1;
for(int i = 1; i < 102020; i++) {
fact[i] = fact[i - 1] * i % mod;
rfact[i] = modInv(fact[i]);
}
}
if(q < 0 || p < q) return (0);
return (fact[p] * rfact[q] % mod * rfact[p - q] % mod);
}
int main()
{
int Gx, Gy, K;
int x[5], y[5], N[5] = {};
cin >> Gx >> Gy >> K;
for(int i = 0; i < K; i++) {
cin >> x[i] >> y[i] >> N[i];
}
vector< pair< int, int > > v[5];
for(int i = 0; i < 5; i++) {
v[i].emplace_back(0, 0);
}
for(int i = 0; i < K; i++) {
int xx = 0, yy = 0;
for(int j = 0; j < N[i]; j++) {
xx += x[i], yy += y[i];
v[i].emplace_back(xx, yy);
}
}
int ret = 0;
for(int i = 0; i <= N[0]; i++) {
for(int j = 0; j <= N[1]; j++) {
for(int k = 0; k <= N[2]; k++) {
for(int l = 0; l <= N[3]; l++) {
for(int m = 0; m <= N[4]; m++) {
int all = i + j + k + l + m;
int xx = v[0][i].first + v[1][j].first + v[2][k].first + v[3][l].first + v[4][m].first;
int yy = v[0][i].second + v[1][j].second + v[2][k].second + v[3][l].second + v[4][m].second;
if(xx != Gx || yy != Gy) continue;
int64 aa = modCombination(all, i);
int64 bb = modCombination(all - i, j);
int64 cc = modCombination(all - i - j, k);
int64 dd = modCombination(all - i - j - k, l);
int64 ee = modCombination(all - i - j - k - l, m);
ret += aa * bb % mod * cc % mod * dd % mod * ee % mod;
ret %= mod;
}
}
}
}
}
cout << ret << endl;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0