zoukankan      html  css  js  c++  java
  • hdu1907||poj3480 sg博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=1907

    这题就相当于取火柴游戏的第二种。

    题意:最后取到的人为败,每次只能从一堆中取>=1的个数。

    看了点论文,真不知道这些人是真没想的,无线崇拜。表示:论文还没看懂。

    按照下面这个做的。

    我们提出定理里的两个限制:1、SG函数为不为0。2、有没有某单一游戏的SG函数大于1。

        通过这两个限制,我们可以组合出4种情况:

        (1)SG==0,有某单一游戏的SG>1。

        (2)SG!=0,有某单一游戏的SG>1。(必胜SJ)

        (3)SG==0,无某单一游戏的SG>1。(必胜SJ)

        (4)SG!=0,无某单一游戏的SG>1。

    http://blog.sina.com.cn/s/blog_51cea4040100h3l9.html

    View Code
    // I'm lanjiangzhou
    //C
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <math.h>
    #include <time.h>
    //C++
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <cctype>
    #include <stack>
    #include <string>
    #include <list>
    #include <queue>
    #include <map>
    #include <vector>
    #include <deque>
    #include <set>
    using namespace std;
    
    //*************************OUTPUT*************************
    #ifdef WIN32
    #define INT64 "%I64d"
    #define UINT64 "%I64u"
    #else
    #define INT64 "%lld"
    #define UINT64 "%llu"
    #endif
    
    //**************************CONSTANT***********************
    #define INF 0x3f3f3f3f
    
    // aply for the memory of the stack
    //#pragma comment (linker, "/STACK:1024000000,1024000000")
    //end
    
    
    const int maxn = 1010;
    int a[maxn];
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            memset(a,0,sizeof(a));
            int n;
            int flag=0;
            scanf("%d",&n);
            int t=0;
            for(int i=0;i<n;i++){
                scanf("%d",&a[i]);
                if(a[i]>1){
                    flag++;
                }
                t=(t^a[i]);
            }
            if(t==0){
                if(flag){
                    printf("Brother\n");
                }
                else printf("John\n");
            }
            else if(t!=0){
                if(flag){
                    printf("John\n");
                }
                else printf("Brother\n");
            }
        }
        return 0;
    }
  • 相关阅读:
    leecode练习--804、唯一摩尔斯密码词
    leecode练习--832、翻转图像
    leecode练习--561、数组拆分Ⅰ
    leecode练习--942、增减字符串匹配
    第二十篇 编程语言分类
    《英语学习》记录
    《视频笔记》记录
    《爬虫》爬取可用的免费IP
    《读书笔记》记录
    数据结构与算法之美
  • 原文地址:https://www.cnblogs.com/lanjiangzhou/p/3018357.html
Copyright © 2011-2022 走看看