zoukankan      html  css  js  c++  java
  • BZOJ1457 棋盘游戏

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1457

    这题神奇一些就在于这题的胜利条件不是拿走最后一张牌了而是走到(0,0)。

    然后就需要大概的转化一下了。

    观察到SG函数中如果没有石子了,说明不能移动了,此时SG=0。

    首先我们将所有能一步走到(0,0)的位置A集合特殊考虑,这些位置显然是先手必胜的,那么有一些位置B是只能走到这些先手必胜的位置上的,我们就可以把它们的SG函数定为0了。

    然后现在的问题成了一个棋盘,走到B集合就不能再移动了,不能移动者输。

    于是就是一个很经典的NIM游戏了,注意在SG函数的推导中那些A集合中的点是不考虑的。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
     
    using namespace std;
     
    const int maxn=110;
    const int maxt=maxn*maxn;
     
    int n;
    int x[maxn*10],y[maxn*10];
    int SG[maxn][maxn];
    int T[maxt];
     
    void Init(){
        int Idex=0;
        for(int i=1;i<=100;i++)
        for(int j=1;j<=100;j++)
        if(i!=j){
            Idex++;
            for(int k=1;k<i;k++) if((i-k)!=j) T[SG[i-k][j]]=Idex;
            for(int k=1;k<j;k++) if(i!=(j-k)) T[SG[i][j-k]]=Idex;
            for(int k=min(i,j)-1;k>=1;k--) T[SG[i-k][j-k]]=Idex;
            for(int k=0;k<maxt;k++)
                if(T[k]!=Idex) {SG[i][j]=k;break;}
        }
    }
     
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("1457.in","r",stdin);
        freopen("1457.out","w",stdout);
    #endif
     
        Init();
     
        int kase;
        scanf("%d",&kase);
         
        while(kase--){
            int ans=0;
            bool Find=false;
             
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%d%d",&x[i],&y[i]);
                if(!x[i] || !y[i] || x[i]==y[i]) Find=true;
                ans^=SG[x[i]][y[i]];
            }
            if(Find)
                puts("^o^");
            else{
                if(ans>0) puts("^o^");
                else puts("T_T");
            }
        }
     
        return 0;
    }
    View Code
  • 相关阅读:
    async中series的实现 javascript构件
    6.算法-计数排序
    5.算法-快速排序
    4.堆排序
    3.分治法研究-搜索数组中的最长连续递增子集
    字典树(Trie)学习笔记
    并查集笔记
    求树的遍历
    P1087 FBI树
    P5017 摆渡车
  • 原文地址:https://www.cnblogs.com/Robert-Yuan/p/5282620.html
Copyright © 2011-2022 走看看