• Bzoj1115 石子游戏Kam


    这是道权限题,差评。

    题目说明引自ZYF-ZYF

    Description

    有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。

    Input

    第一行u表示数据组数。对于每组数据,第一行N表示石子堆数,第二行N个数ai表示第i堆石子的个数(a1<=a2<=……<=an)。 1<=u<=10 1<=n<=1000 0<=ai<=10000

    Output

    u行,若先手必胜输出TAK,否则输出NIE。

    Sample Input

    2

    2

    2 2

    3

    1 2 4

    Sample Output

    NIE

    TAK

    从i处移走x个石子,可以看做从i处移x个到i+1处,而i+1处下次可以多移x个石子。

    这样可以把问题转化成阶梯上的nim问题

    天呐又是nim

     1 /*by SilverN*/
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 using namespace std;
     8 int s,n;
     9 int a[50000];
    10 int main(){
    11     int T;
    12     scanf("%d",&T);
    13     while(T--){
    14         scanf("%d",&n);
    15         int i;
    16         for(i=1;i<=n;i++)scanf("%d",&a[i]);
    17         a[n+1]=0;
    18         s=0;
    19         for(i=1;i<=n;i++)if(i&1)s^=a[i]-a[i+1];
    20         if(s)printf("TAK
    ");
    21         else printf("NIE
    ");
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    elasticsearch索引的增删改查入门
    windows下mongodb安装与使用
    在SqlServer中使用Try Catch(转)
    sqlserver 存储过程 try catch TRANSACTION (转)
    SQLserver2008如何把表格变量传递到存储过程中
    SQL对字符串数组的处理
    SQLSERVER数据库表各种同步技术
    函数参数
    闭包
    枚举
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5658745.html
Copyright © 2020-2023  润新知