zoukankan      html  css  js  c++  java
  • [bzoj1022][SHOI2008]小约翰的游戏John【博弈论】

    【题目链接】
      http://www.lydsy.com/JudgeOnline/problem.php?id=1022
    【题解】
      Anti-Nim游戏
      这里写图片描述
      *SG值即为异或值
      证明:
      (2)似乎不用证明
      (1)的话,如果SG==0,那么一定有一堆以上大于1,所以先手无法做到(2)的第2点,若先手行动后还剩下一堆大于1的,那么后手可以做到进入第二个状态(取完那堆或剩一个),如果大于1堆,那么只要模仿先手使得SG变为0即可。

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
        int num,opt,n,j,flag;
        for (scanf("%d",&opt); opt>0; opt--){
            scanf("%d",&n); num=flag=0;
            for (int i=1; i<=n; i++){
                scanf("%d",&j);
                num=num xor j;
                if (j>1) flag=1;
            }
            if ((flag==1&&num==0)||(flag==0&&num!=0)) printf("Brother
    ");
                else printf("John
    ");
        }
    }
  • 相关阅读:
    Java——泛型、异常
    接口
    Classes
    Unit Tests
    Boundaries
    Error Handling
    Objects and Data Structures
    DB other operation
    Comments
    Functions
  • 原文地址:https://www.cnblogs.com/Vanisher/p/9136001.html
Copyright © 2011-2022 走看看