牛客网 Chess ( 博弈 && 奇异局势 )

题目链接

 

分析 : 

发现如果一开始就在边界或者位于对角线的位置上肯定是必胜态

从终点逆推,画出胜负表格,填一填,就会发现和奇异局势的前几项一样

然后打个奇异局势的表就能 AC 了

 

#include<bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
#define pb(i) push_back(i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define MK(i, j) make_pair(i, j)
#define mem(a, b) memset(a, b, sizeof(a))
#define ins(i) insert(i)
#define lowbit(i) (i & (-i))
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define INF (0x3f3f3f3f)
using namespace std;
const int maxn = 1e4 + 10;
int arr[maxn];

inline void init()
{
    mem(arr, -1);
    int num = 0;
    for(int i=0; i+num<maxn; i++){
        if(arr[i] == -1){
            arr[i] = i+num;
            arr[i+num] = i;
            num++;
        }
    }
}

int main(void)
{
    init();
    int a, b;
    while(~scanf("%d %d", &a, &b)){
        if(arr[a] == b || arr[b] == a) puts("Lao Wang");
        else puts("Xiao Ren");
    }
    return 0;
}
View Code

 

posted @ 2018-05-01 18:42  qwerity  阅读(415)  评论(0编辑  收藏  举报