poj 3480 John 简单的nim博弈
2013-08-28 22:34
232 查看
John
(1) 超过1的个数为2 然后异或值!=0 先者胜,若为0则后者胜 直接按nim来
(2)超过1的个数为1个 然后先者胜
(3)超过1的个数没有,都为1的话,奇数个是后者胜,偶数时先者胜
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
int main()
{
int x;
scanf("%d",&x);
while(x--){
int n;
scanf("%d",&n);
int aboveOne=0,num,tmp;
scanf("%d",&num);
if(num>1)aboveOne++;
for(int i=2;i<=n;i++){
scanf("%d",&tmp);
if(tmp>1)aboveOne++;
num=num^tmp;
}
if(aboveOne>=2){
if(num!=0)printf("John\n");
else printf("Brother\n");
}
if(aboveOne==1){
printf("John\n");
}
if(aboveOne==0){
if(n%2==1)printf("Brother\n");
else printf("John\n");
}
}
return 0;
}
(1) 超过1的个数为2 然后异或值!=0 先者胜,若为0则后者胜 直接按nim来
(2)超过1的个数为1个 然后先者胜
(3)超过1的个数没有,都为1的话,奇数个是后者胜,偶数时先者胜
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
int main()
{
int x;
scanf("%d",&x);
while(x--){
int n;
scanf("%d",&n);
int aboveOne=0,num,tmp;
scanf("%d",&num);
if(num>1)aboveOne++;
for(int i=2;i<=n;i++){
scanf("%d",&tmp);
if(tmp>1)aboveOne++;
num=num^tmp;
}
if(aboveOne>=2){
if(num!=0)printf("John\n");
else printf("Brother\n");
}
if(aboveOne==1){
printf("John\n");
}
if(aboveOne==0){
if(n%2==1)printf("Brother\n");
else printf("John\n");
}
}
return 0;
}
相关文章推荐
- HDU 1907 John 与 poj 3480
- Anti-nim博弈 John poj3480
- Anti_SG博弈,SJ定理_______John( POJ 3480 )
- POJ 3480 John (Nim博弈)
- POJ 3480 & HDU 1907 John(尼姆博弈变形)
- poj 3480 John
- POJ 3480 John
- POJ 3480 John(尼姆变型,取光者输)
- POJ 3480 John [博弈之Nim 与 Anti-Nim]
- poj_John_3480
- POJ 3480 & HDU 1907 John(尼姆博弈变形)
- POJ 2001 Shortest Prefixes (字典树,简单)
- poj 2342 Anniversary party(简单树形dp+dfs)
- POJ 1041 John's trip Euler欧拉回路判定和求回路
- poj 2352 Stars(简单树状数组)此题也可以用线段树来做
- POJ 2251 Dungeon Master(三维简单广搜)
- (POJ 1724)ROADS <DFS + 简单剪枝>
- poj 1741 简单树分治
- POJ 3009 Curling 2.0(简单DFS)
- POJ 2017 Speed Limit (直叙式的简单模拟 编程题目 动态属性很少,难度小)