結果
| 問題 |
No.102 トランプを奪え
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-06-18 13:34:56 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 112 ms / 5,000 ms |
| コード長 | 1,500 bytes |
| コンパイル時間 | 416 ms |
| コンパイル使用メモリ | 56,416 KB |
| 実行使用メモリ | 19,368 KB |
| 最終ジャッジ日時 | 2024-07-07 03:37:42 |
| 合計ジャッジ時間 | 1,329 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 8 |
ソースコード
#include <cstdlib>
#include <cstring>
#include <iostream>
#define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++)
using namespace std;
const double EPS=1e-9;
int dn[4];
const int S = 13;
int dp[4 * S + 1][S + 1][S + 1][S + 1][S + 1][2] = {};
int rec(int th, int jh, int a, int b, int c, int d, int w) {
int &ret = dp[jh][a][b][c][d][w];
if (ret >= 0) {
return ret;
}
int res = 1;
if (a + b + c + d == 0) {
return ret = w ? th >= jh : th > jh;
}
if (a > 0) {
REP(i, 1, 4) {
if (a == i) {
res &= rec(jh / 2, th + jh - jh / 2 + i, 0, b, c, d, 1 - w);
}
if (a > i) {
res &= rec(jh, th + i, a - i, b, c, d, 1 - w);
}
}
}
if (b > 0) {
REP(i, 1, 4) {
if (b == i) {
res &= rec(jh / 2, th + jh - jh / 2 + i, a, 0, c, d, 1 - w);
}
if (b > i) {
res &= rec(jh, th + i, a, b - i, c, d, 1 - w);
}
}
}
if (c > 0) {
REP(i, 1, 4) {
if (c == i) {
res &= rec(jh / 2, th + jh - jh / 2 + i, a, b, 0, d, 1 - w);
}
if (c > i) {
res &= rec(jh, th + i, a, b, c - i, d, 1 - w);
}
}
}
if (d > 0) {
REP(i, 1, 4) {
if (d == i) {
res &= rec(jh / 2, th + jh - jh / 2 + i, a, b, c, 0, 1 - w);
}
if (d > i) {
res &= rec(jh, th + i, a, b, c, d - i, 1 - w);
}
}
}
return ret = 1 - res;
}
int main(void){
REP(i, 0, 4) {
cin >> dn[i];
}
memset(dp, -1, sizeof(dp));
cout << (rec(0, 0, dn[0], dn[1], dn[2], dn[3], 0) ? "Taro" : "Jiro") << endl;
}