結果
問題 | No.498 ワープクリスタル (給料日編) |
ユーザー | ei1333333 |
提出日時 | 2017-03-24 23:04:22 |
言語 | C++11 (gcc 11.4.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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 25 ms
5,248 KB |
testcase_01 | AC | 26 ms
5,376 KB |
testcase_02 | AC | 25 ms
5,376 KB |
testcase_03 | AC | 25 ms
5,376 KB |
testcase_04 | AC | 26 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 27 ms
5,376 KB |
testcase_07 | AC | 26 ms
5,376 KB |
testcase_08 | AC | 26 ms
5,376 KB |
testcase_09 | AC | 3 ms
5,376 KB |
testcase_10 | AC | 24 ms
5,376 KB |
testcase_11 | AC | 25 ms
5,376 KB |
testcase_12 | AC | 25 ms
5,376 KB |
testcase_13 | AC | 25 ms
5,376 KB |
testcase_14 | AC | 26 ms
5,376 KB |
testcase_15 | AC | 25 ms
5,376 KB |
testcase_16 | AC | 26 ms
5,376 KB |
testcase_17 | AC | 25 ms
5,376 KB |
testcase_18 | AC | 27 ms
5,376 KB |
testcase_19 | AC | 27 ms
5,376 KB |
testcase_20 | AC | 27 ms
5,376 KB |
testcase_21 | AC | 27 ms
5,376 KB |
testcase_22 | AC | 26 ms
5,376 KB |
testcase_23 | AC | 27 ms
5,376 KB |
testcase_24 | AC | 27 ms
5,376 KB |
ソースコード
#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; }