Game

Time Limit:1000MS     Memory Limit:65536KB

Description

Here is a game for two players. The rule of the game is described below:

● In the beginning of the game, there are a lot of piles of beads.

● Players take turns to play. Each turn, player choose a pile i and remove some (at least one) beads from it. Then he could do nothing or split pile i into two piles with a beads and b beads.(a,b > 0 and a + b equals to the number of beads of pile i after removing)

● If after a player's turn, there is no beads left, the player is the winner.

Suppose that the two players are all very clever and they will use optimal game strategies. Your job is to tell whether the player who plays first can win the game.

Input

There are multiple test cases. Please process till EOF.

For each test case, the first line contains a postive integer n(n < 10 5) means there are n piles of beads. The next line contains n postive integer, the i-th postive integer a i(a i < 2 31) means there are a i beads in the i-th pile.

Output

For each test case, if the first player can win the game, ouput "Win" and if he can't, ouput "Lose"

Sample Input

1

1

2

1 1

3

1 2 3

Sample Output

Win

Lose

Lose

题解:

  1. 这道题是典型的Nim游戏,与Nim游戏不同的是该题中除了至少拿走一颗珠子以外,还可以将该堆剩下的珠子分为两堆,其实这对游戏的胜负判断是没有影响的。因为至少拿走了一颗珠子,那么xor求和,之前为0,拿走珠子以后,无论是否将剩下的该堆珠子分为两堆,此时的xor和必不为零,反之亦然。

  2. 关于Nim游戏,已经有大量的解释,在此略过。

​以下是代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <sstream>
#include <queue>
using namespace std; #define F(i,s,e) for(int i = s;i<e;i++)
#define ss(x) scanf("%d",&x)
#define write() freopen("1.in","r",stdin)
#define W(x) while(x) int main(){
//write();
int n,t,sum;
W(ss(n)!=EOF){
sum=0;
W(n--){
ss(t);
sum^=t;//对所有的输入xor求和
}
if(sum)printf("Win\n");
else printf("Lose\n");//和为零,则先手必输
}
}

  

最新文章

  1. WebSocket通信协议
  2. 利用增量备份恢复因归档丢失造成的DG gap
  3. ccc 设置图片位置
  4. java 中设置session失效时间
  5. 我和NLP的故事(转载)
  6. 控制台应用程序中Main函数的args参数
  7. PAT 1004
  8. js中跨域请求原理及2种常见解决方案
  9. 初入 Spring.net
  10. MySQL索引1
  11. C++ 如何获取三个相同数值中的最大值或最小值?
  12. 安卓高级8 SurfaceView案例三 结合mediaplay播放视频
  13. 基础总结(04)-- display:none;&amp;&amp;visibility:hidden;区别
  14. SpringDataJPA
  15. String 类的实现(2)引用计数与写时拷贝
  16. 没有IDE的日子
  17. 富文本编辑器Ueditor 及 hibernate 逆向工程
  18. PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级
  19. FMS4.5( Adobe Flash Media Server4.5)流媒体服务器搭建
  20. 20155238 2016-2017-2 《JAVA程序设计》第九周学习总结

热门文章

  1. Linux中使用SecureCRT上传、下载文件命令sz与rz用法实例
  2. MemSQL start[c]up Round 1.b
  3. C# 图片识别技术(支持21种语言,提取图片中的文字)
  4. 170404、java版ftp操作工具类
  5. Spring-AOP的五种通知和切面的优先级、通知变量声明
  6. QBC检索和本地SQL检索
  7. 1.引入jQuery
  8. TFS中工作项的定制-修改面板
  9. Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途
  10. CloudFoundry V2 单机版离线安装(伪离线安装)