結果
| 問題 |
No.498 ワープクリスタル (給料日編)
|
| コンテスト | |
| ユーザー |
ei1333333
|
| 提出日時 | 2017-03-24 23:00:00 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,030 bytes |
| コンパイル時間 | 1,560 ms |
| コンパイル使用メモリ | 167,444 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-05 23:05:44 |
| 合計ジャッジ時間 | 2,507 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 10 WA * 11 |
ソースコード
#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].first + 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;
}
ei1333333