博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
40086311Nim
阅读量:5154 次
发布时间:2019-06-13

本文共 842 字,大约阅读时间需要 2 分钟。

试题描述
有n堆石子,每堆各有a
i颗石子。Alice和Bob轮流从非空的石子堆中取走至少一颗石子。Alice先取,取光所有石子的一方获胜。S双方都采取最优策略时,谁会获胜?
输入
一行,共n+1个数,第一个数为n,接下来共有n个数,两两之间用一个空格隔开。
输出
输出获胜一方的名字。
输入示例
3 1 2 4
输出示例
Alice
其他说明
1≤n≤ 1000000,1≤ai≤ 109
 
1 #include 
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

 具体分析见相册。

转载于:https://www.cnblogs.com/YXY-1211/p/5266510.html

你可能感兴趣的文章
RFC1321 MD5加密算法
查看>>
白光LED驱动方案的选择 TPS61043
查看>>
A brief CRC tutorial
查看>>
Spring事物管理(二)
查看>>
Java 学习路线之四个阶段
查看>>
挥手2016,走向2017
查看>>
理解基本包装类型Number,String,Boolean
查看>>
新的博客
查看>>
节省编译时间
查看>>
FPGA能代替CPU架构吗?
查看>>
微带线和带状线
查看>>
大数据面试题——如何在大量的数据中找出不重复的数
查看>>
ASP进阶教程Ⅷ:数据库版本的留言簿
查看>>
【三边定位】 演示程序V0.1
查看>>
CSS之基础
查看>>
ECharts三维图表
查看>>
洛谷 P1843 奶牛晒衣服
查看>>
严肃贴:内幕 手机行业
查看>>
Spring Swagger URL传参问题(转)
查看>>
[HDU 2966]In case of failure
查看>>