J-Split Game

江西省赛的J题。。。

总之就是简单博弈。。。

由于太菜没写出来呢。。。

可以说是很菜了。。。

啊啊啊啊。。。。

#include<bits/stdc++.h>
#define inf 1e18
#define ll long long
#define MAX 1000001
const ll N = 1e4+7;
const ll mod = 1e18;
using namespace std;
int sg[200][200],x,y;
int dfs(int n,int m){
    if(sg[n][m]!=-1) return sg[n][m];
    set<int> s;
    for(int i=1;i<n;++i){
        if((i==1&&m==1)||(i==n-1&&m==1)) continue;
        int now=dfs(i,m)^dfs(n-i,m); 
        s.insert(now);
    }
    for(int i=1;i<m;++i){
        if((i==1&&n==1)||(i==m-1&&n==1)) continue;
        int now=dfs(n,i)^dfs(n,m-i); 
        s.insert(now);
    }
    for(int i=0;i<=10000;++i){
        if(!s.count(i)){
            sg[n][m]=i;break;
        }
    }
    return sg[n][m];
}
int main(){
    memset(sg,-1,sizeof(sg));
    sg[1][1]=sg[1][2]=sg[2][1]=sg[1][3]=sg[3][1]=0;
    dfs(150,150);
    while(scanf("%d%d",&x,&y)!=EOF){
        if(sg[x][y]) puts("Alice");
        else         puts("Bob");
    }
    return 0; 
}

 

posted @ 2021-03-23 23:28  PdrEam  阅读(20)  评论(0编辑  收藏  举报