結果
問題 | No.498 ワープクリスタル (給料日編) |
ユーザー |
|
提出日時 | 2017-03-24 23:37:15 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 11 ms / 2,000 ms |
コード長 | 1,692 bytes |
コンパイル時間 | 668 ms |
コンパイル使用メモリ | 92,600 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-06 00:51:49 |
合計ジャッジ時間 | 1,490 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 21 |
ソースコード
#include<map>#include<set>#include<list>#include<cmath>#include<queue>#include<stack>#include<cstdio>#include<string>#include<vector>#include<complex>#include<cstdlib>#include<cstring>#include<numeric>#include<sstream>#include<iostream>#include<algorithm>#include<functional>#define mp make_pair#define pb push_back#define all(x) (x).begin(),(x).end()#define YES() printf("YES\n")#define NO() printf("NO\n")using namespace std;#define int long long//typedef long long ll;typedef unsigned long long ull;typedef vector<bool> vb;typedef vector<int> vi;typedef vector<vb> vvb;typedef vector<vi> vvi;//typedef pair<int,int> P;const int INF=1e+13;const double EPS=1e-9;const int MOD = 1000000007;const int dx[]={1,0,-1,0},dy[]={0,-1,0,1};int cnt[5],comb[100][100] = {};int gx,gy,k,x[5],y[5],n[5],res = 0;void dfs(int num){if(num == k){int xx = 0,yy = 0,sum = 0;for(int i = 0;i < k;i++){xx += x[i] * cnt[i];yy += y[i] * cnt[i];sum += cnt[i];}if(xx != gx || yy != gy) return;int plus = 1,now = sum;for(int i = 0;i < k;i++){plus = plus * comb[now][now - cnt[i]] % MOD;now -= cnt[i];}res = (res + plus) % MOD;return;}for(int i = 0;i <= n[num];i++){cnt[num] = i;dfs(num + 1);}}signed main(){cin >> gx >> gy >> k;for(int i = 0;i < 100;i++){comb[i][0] = 1;comb[i][i] = 1;}for(int i = 1;i < 100;i++){for(int j = 1;j < i;j++){comb[i][j] = (comb[i - 1][j] + comb[i - 1][j - 1]) % MOD;}}for(int i = 0;i < k;i++){cin >> x[i] >> y[i] >> n[i];}dfs(0);cout << res << endl;return 0;}