結果
問題 | No.102 トランプを奪え |
ユーザー |
![]() |
提出日時 | 2021-10-26 15:25:39 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 48 ms / 5,000 ms |
コード長 | 1,573 bytes |
コンパイル時間 | 4,450 ms |
コンパイル使用メモリ | 251,244 KB |
最終ジャッジ日時 | 2025-01-25 07:15:10 |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 8 |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> #include <atcoder/all> using namespace atcoder; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000 int N[4]; int S = 0; int dp[14][14][14][14][53]; int get(int a,int b,int c,int d,int e){ if(dp[a][b][c][d][e]!=-1)return dp[a][b][c][d][e]; int me = e,opp = S-a-b-c-d-e; int ret = -Inf; for(int i=1;i<=3;i++){ if(i<=a){ int temp = me - opp + i; int ee = opp; if(a-i==0){ temp += ((opp+1)/2)*2; ee = (ee+1)/2; } temp -= get(a-i,b,c,d,ee); ret = max(ret,temp); } } for(int i=1;i<=3;i++){ if(i<=b){ int temp = me - opp + i; int ee = opp; if(b-i==0){ temp += ((opp+1)/2)*2; ee = (ee+1)/2; } temp -= get(a,b-i,c,d,ee); ret = max(ret,temp); } } for(int i=1;i<=3;i++){ if(i<=c){ int temp = me - opp + i; int ee = opp; if(c-i==0){ temp += ((opp+1)/2)*2; ee = (ee+1)/2; } temp -= get(a,b,c-i,d,ee); ret = max(ret,temp); } } for(int i=1;i<=3;i++){ if(i<=d){ int temp = me - opp + i; int ee = opp; if(d-i==0){ temp += ((opp+1)/2)*2; ee = (ee+1)/2; } temp -= get(a,b,c,d-i,ee); ret = max(ret,temp); } } dp[a][b][c][d][e] = ret; return ret; } int main(){ rep(i,4){ cin>>N[i]; S += N[i]; } rep(i,14){ rep(j,14){ rep(k,14){ rep(l,14){ rep(ll,53)dp[i][j][k][l][ll] = -1; } } } } int Ans = get(N[0],N[1],N[2],N[3],0); if(Ans == 0)cout<<"Draw"<<endl; else if(Ans>0)cout<<"Taro"<<endl; else cout<<"Jiro"<<endl; return 0; }