結果
| 問題 |
No.498 ワープクリスタル (給料日編)
|
| コンテスト | |
| ユーザー |
はまやんはまやん
|
| 提出日時 | 2017-03-24 23:02:14 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,458 bytes |
| コンパイル時間 | 1,492 ms |
| コンパイル使用メモリ | 167,376 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-05 23:09:27 |
| 合計ジャッジ時間 | 4,865 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 2 WA * 19 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
int mod = 1000000007;
int add(int x, int y) { return (x += y) >= mod ? x - mod : x; }
int mul(int x, int y) { return 1LL * x * y % mod; }
int modpow(int a, long long b) {
int ret = 1;
while (b > 0) {
if (b & 1) ret = 1LL * ret * a % mod;
a = 1LL * a * a % mod; b >>= 1;
}
return ret;
}
int modinv(int a) { return modpow(a, mod - 2); }
int fac[201010], ifac[201010];
void initfac() {
fac[0] = ifac[0] = 1;
rep(i, 1, 201010) fac[i] = 1LL * i * fac[i - 1] % mod;
rep(i, 1, 201010) ifac[i] = modinv(fac[i]);
}
//-----------------------------------------------------------------------------------
int GX, GY, K;
int X[10], Y[10], N[10];
//-----------------------------------------------------------------------------------
int ans = 0;
int use[10];
void rec(int idx) {
if (idx == K) {
int x = 0, y = 0;
rep(i, 0, K) x += X[i] * use[i];
rep(i, 0, K) y += Y[i] * use[i];
if (x != GX) return;
if (y != GY) return;
// todo : calc
int sm = 0;
rep(i, 0, K) sm += use[i];
int com = fac[sm];
rep(i, 0, K) com = mul(com, modinv(use[i]));
ans = add(ans, com);
return;
}
rep(i, 0, N[idx] + 1) {
use[idx] = i;
rec(idx + 1);
}
}
//-----------------------------------------------------------------------------------
int main() {
initfac();
cin >> GX >> GY >> K;
rep(i, 0, K) cin >> X[i] >> Y[i] >> N[i];
rec(0);
cout << ans << endl;
}
はまやんはまやん