• POJ1704 Georgia and Bob Nim游戏


    POJ1704

    这道题可以转化为经典的Nim游戏来解决。

    Nim游戏是这样的

    有n堆石子,每堆各有ai个。 两个人轮流在任意石子堆中取至少1个石子,不能再取的输。

    解决方法如下, 对N堆石子求异或 为0则甲必胜 否则乙必胜 证明略。

    对于这道题目 两个棋子的间距可以当作Nim石子的一堆来处理,

    当然,在这个题目中 玩家把左边的棋子向左移动后等于给Nim石堆增加了石子,不过无伤大雅。只要减去对应的石子数就回到了原状态

    代码很简单 输入数据是无序的 需要排序

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<algorithm>
    using namespace std;
    const int MAXN=1001;
    int N,P[MAXN];
    
    void solve()
    {
     if(N%2==1){P[N++]=0;sort(P,P+N);}
     
     int x=0;
     for(int i=0;i+1<N;i+=2)
     	x^=(P[i+1]-P[i]-1);
     if(x==0)printf("Bob will win
    ");
     	else printf("Georgia will win
    ");
    }
    int main()
    {freopen("t.txt","r",stdin);
     int T;
     scanf("%d",&T);
     while(T--)
     	{
     	 scanf("%d",&N);
     	 for(int i=0;i<N;i++)
     	 	scanf("%d",&P[i]);
     	 sort(P,P+N);
     	 solve();
    	}
     return 0;
    }
    

      

  • 相关阅读:
    vbScript首字拼音查询
    C#读取U盘序列号
    下拉 回车 筛选
    Oracle的汉字转拼音首字母的函数
    sql 触发器禁止和启用
    List.FindAll 方法
    MyControl 常用操作
    List.Find 方法
    regsvr32 C:\WINDOWS\system32\cell32.ocx
    2222222
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6657381.html
Copyright © 2020-2023  润新知