• 51nod 棋盘问题(博弈论)


    题目链接:

    棋盘问题

    基准时间限制:1 秒 空间限制:131072 KB 分值: 40

    上帝创造了一个n*m棋盘,每一个格子都只有可能是黑色或者白色的。

    亚当和夏娃在玩一个游戏,每次寻找边长为x的正方形,其中每个格子必须为黑色,然后将这些格子染白。

    如果谁不能操作了,那么那个人就输了。

    亚当喜欢质数。

    夏娃喜欢1,但讨厌2。

    因此他们规定,x只有可能是非2质数或者是1。

    现在他们想知道,如果他们都用最优策略进行游戏,谁会赢。

    上帝规定亚当先手。


    样例解释:

    这里x只有可能是1,因此经过3次操作后,夏娃无法操作,亚当胜。

     
    Input
     
    第一行输入一个T,表示有几组测试数据(1<=T<=10)
    接下来每一个数据第一行有两个整数n,m(1<=n,m<=100)
    接下来n行每行m个数,若这个数是1,则表示该位置是黑色,否则为白色。
     
    Output
     
    对于每一组数据输出“yadang”或者“xiawa”(不含引号,表示那个人会赢)。
     
    Input示例
    1
    2 3
    1 1 0
    0 0 1
    Output示例
    yadang


    题意:


    思路:

    相当于把所有的黑子取走,因为只能取非2的质数和1为边长的正方形,所以每次取走的都是奇数个棋子,答案就是看棋盘上有奇数个还是偶数个黑棋子了;

    AC代码:
    #include <bits/stdc++.h>
    /*
    #include <iostream>
    #include <queue>
    #include <cmath>
    #include <map>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    */
    using namespace std;
    #define Riep(n) for(int i=1;i<=n;i++)
    #define Riop(n) for(int i=0;i<n;i++)
    #define Rjep(n) for(int j=1;j<=n;j++)
    #define Rjop(n) for(int j=0;j<n;j++)
    #define mst(ss,b) memset(ss,b,sizeof(ss));
    typedef long long LL;
    const LL mod=1e9+7;
    const double PI=acos(-1.0);
    const LL inf=1e18;
    const int N=1e5+4;
    int n,m,a[105][105];
    int main()
    {
          int t;
          scanf("%d",&t);
          while(t--)
          {
              scanf("%d%d",&n,&m);
              int sum=0;
              Riep(n)
              {
                  Rjep(m)
                  {
                      scanf("%d",&a[i][j]);
                      sum+=a[i][j];
                  }
              }
              if(sum%2)printf("yadang
    ");
              else printf("xiawa
    ");
          }
        return 0;
    }
    
    
    



  • 相关阅读:
    10多媒体
    胡凡-01
    概念
    算法
    07Axios
    05VueCli
    04Vue.js路由系统
    03生命周期
    《穷人思维》学习感悟
    《基金》学习感悟之二
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5543882.html
Copyright © 2020-2023  润新知