結果
| 問題 |
No.102 トランプを奪え
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-08-20 13:03:24 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 191 ms / 5,000 ms |
| コード長 | 1,352 bytes |
| コンパイル時間 | 1,570 ms |
| コンパイル使用メモリ | 176,144 KB |
| 実行使用メモリ | 8,960 KB |
| 最終ジャッジ日時 | 2024-07-18 10:50:29 |
| 合計ジャッジ時間 | 2,614 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 8 |
ソースコード
#include <bits/stdc++.h>
#define rep(i, a) for (int i = 0; i < (a); i++)
#define rep2(i, a, b) for (int i = (a); i < (b); i++)
#define repr(i, a) for (int i = (a) - 1; i >= 0; i--)
#define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--)
using namespace std;
typedef long long ll;
const ll inf = 1e9;
const ll mod = 1e9 + 9;
typedef pair<int, int> P;
map<pair<P, vector<int>>, P> dp;
P dfs(P score, vector<int> N) {
sort(N.begin(), N.end());
auto key = make_pair(score, N);
if (dp.count(key)) return dp[key];
swap(score.first, score.second);
if (all_of(N.begin(), N.end(), [](int x) { return x == 0; })) {
return score;
}
P res(-1, inf);
rep (j, 4) {
rep2 (k, 1, min(4, N[j] + 1)) {
N[j] -= k;
P p;
if (k < N[j]) {
p = dfs(P(score.first + k, score.second), N);
} else {
p = dfs(P(score.first + (score.second + 1) / 2 + k, score.second / 2), N);
}
swap(p.first, p.second);
if (res.first < p.first) {
res = p;
} else if (res.first == p.first && res.second > p.second) {
res = p;
}
N[j] += k;
}
}
return dp[key] = res;
}
int main() {
vector<int> N(4);
rep (i, 4) cin >> N[i];
auto ans = dfs(P(0, 0), N);
if (ans.first > ans.second) {
cout << "Taro" << endl;
} else if (ans.first == ans.second) {
cout << "Draw" << endl;
} else {
cout << "Jiro" << endl;
}
return 0;
}