G. Game of Cards 题解(巴什博弈变形)

题目链接

题目思路

三种操作

1 减少一个0

2 减少两个1加一个2

3 减少一个1 和一个2

那么每次对手都能使得(c0-2)或者(c1-3)

根据巴士博弈的思想那么就直接取模,然后爆搜

注意特判只有(C0)的情况

代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=20+5,inf=0x3f3f3f3f,mod=998244353,lim=300;
const double eps=1e-6;
int a,b,c,d;
int tot;
int ans;
int dfs(int a,int b,int c,int d){
    bool flag=1;
    int ans=1;
    if(a>=1){
        ans&=dfs(a-1,b,c,d);
        flag=0;
    }
    if(b>=2){
        ans&=dfs(a,b-2,c+1,d);
        flag=0;
    }
    if(b>0&&c>0){
        flag=0;
        ans&=dfs(a,b-1,c-1,d+1);
    }
    if(flag){
        return 0;
    }
    ans=(!ans);
    return ans;
}
signed main(){
    int _;scanf("%d",&_);
    while(_--){
        scanf("%d%d%d%d",&a,&b,&c,&d);
        if(b==0&&c==0&&d==0){
            if(a==0){
                ans=0;
            }else if(a%2==0){
                ans=1;
            }else{
                ans=0;
            }
        }else{
            ans=dfs(a%2,b%3,c,d);
        }
        printf("Case #%d: ",++tot);
        printf(!ans?"Horse
":"Rabbit
");
    }
    return 0;
}

不摆烂了,写题
原文地址:https://www.cnblogs.com/hunxuewangzi/p/15259198.html