hdu 1907 John (Nim变形)
2012-05-04 10:02
471 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1907
Nim的变形,最后取为败,详见/article/5075793.html中取火柴游戏2。
这里总结下结论:
1. 当所有堆个数都为1时,若为奇数堆,即异或不为0,则先手败,反之先手胜。
2. 非所有堆个数都为1时,则异或不为0先手胜。
用上述博文中的定义则为T0, S1, S2为必胜态,T1, S0为必败态。
code:
#include<cstdio>
int main(){
int t, n, f, i, a, sum ;
scanf("%d", &t) ;
while(t--){
sum = f = 0 ;
scanf("%d", &n) ;
for(i=0; i<n; i++){
scanf("%d", &a) ;
sum ^= a ;
if(a>1) f = 1 ;
}
if(sum) sum = 1 ;
if(f^sum) printf("Brother\n") ;
else printf("John\n") ;
}
return 0 ;}
Nim的变形,最后取为败,详见/article/5075793.html中取火柴游戏2。
这里总结下结论:
1. 当所有堆个数都为1时,若为奇数堆,即异或不为0,则先手败,反之先手胜。
2. 非所有堆个数都为1时,则异或不为0先手胜。
用上述博文中的定义则为T0, S1, S2为必胜态,T1, S0为必败态。
code:
#include<cstdio>
int main(){
int t, n, f, i, a, sum ;
scanf("%d", &t) ;
while(t--){
sum = f = 0 ;
scanf("%d", &n) ;
for(i=0; i<n; i++){
scanf("%d", &a) ;
sum ^= a ;
if(a>1) f = 1 ;
}
if(sum) sum = 1 ;
if(f^sum) printf("Brother\n") ;
else printf("John\n") ;
}
return 0 ;}
相关文章推荐
- HDU 1907 John nim博弈变形 Anti-SG
- hdu 1907 John(组合游戏 NIM变形)@
- HDU 2509 Be the Winner && HDU 1907 John (Nim博弈变形)
- (hdu 1907)John (Misère Nim,Nim博弈的变形)
- hdu_1907:John(Nim变形)
- HDU 1907 John nim博弈变形
- HDU 1907 John(Nim游戏 取完为输)
- HDU 1907 nim博弈变形
- HDU 1907 John(anti-nim)
- hdu 1907 John Nim博弈 最后一个取石子者输
- HDU 1907 John (Nim博弈)
- POJ 3480 & HDU 1907 John(尼姆博弈变形)
- hdu 1907 John&& hdu 2509 Be the Winner(基础nim博弈)
- HDU 1907 John(Nim game)
- HDU(2509) Be the Winner /HDU(1907) John (Nim 博弈)
- HDU_1907 John(Anti-Nim)
- hdu 1907 John(anti-nim)
- hdu 1907 John (anti—Nim)
- hdu 1907 John,hdu 2509 Be the Winner anti-NIM
- HDU 1907 John(Nim博弈)