zoukankan      html  css  js  c++  java
  • 40086311Nim

    试题描述
    有n堆石子,每堆各有ai颗石子。Alice和Bob轮流从非空的石子堆中取走至少一颗石子。Alice先取,取光所有石子的一方获胜。S双方都采取最优策略时,谁会获胜?
    输入
    一行,共n+1个数,第一个数为n,接下来共有n个数,两两之间用一个空格隔开。
    输出
    输出获胜一方的名字。
    输入示例
    3 1 2 4
    输出示例
    Alice
    其他说明
    1≤n≤ 1000000,1≤ai≤ 109
     
     1 #include <iostream>
     2 
     3 using namespace std;
     4 int p[105];
     5 int main()
     6 {
     7     int n,i,sum=0,cnt=0;
     8     scanf("%d",&n);
     9     for(i=1;i<=n;i++)
    10     {
    11         scanf("%d",&p[i]);
    12         sum=p[i]^sum;   //求p[i]和sum的异或值 
    13     }
    14     for(i=1;i<=n;i++)
    15         if(p[i]>(sum^p[i])) {cnt++;break;}    //注意'^'的优先级小于'>',所以要加括号 
    16     if(cnt>0) printf("Alice");
    17     else printf("Bob");
    18     //system("pause");
    19     return 0;
    20 }
    21 //^的意思不是乘方而是"异或"。
    22 //异或:二进制中,00或11都是0,10或01都是1。可以理解为不考虑进位的二进制加法。(1+1=0进位是1,舍去后当前位是0) 
    23 //本题规律:算每堆数量的异或,如果为0,则先手败,反之先手胜。 
    40086311Nim

     具体分析见相册。

  • 相关阅读:
    linux分区-df
    day34 协程
    day33 GIL锁 线程队列 线程池
    day32 线程
    day31 管道 进程池 数据共享
    day30 锁 队列
    day29 进程
    day28 socketserver
    day27 粘包及粘包的解决方案
    day26 网络通讯的整个流程
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5266510.html
Copyright © 2011-2022 走看看