【HIHOCODER 1163】 博弈游戏·Nim游戏
2017-08-16 11:01
435 查看
描述
今天我们要认识一对新朋友,Alice与Bob。Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏。
在这个游戏中,Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个石子。
每一次行动,Alice和Bob可以选择从一堆石子中取出任意数量的石子。至少取1颗,至多取出这一堆剩下的所有石子。
Alice和Bob轮流行动,取走最后一个石子的人获得胜利。
假设每一轮游戏都是Alice先行动,请你判断在给定的情况下,如果双方都足够聪明,谁会获得胜利?
输入
第1行:1个整数N。表示石子堆数。1≤N≤100第2行:N个整数,第i个整数表示第i堆石子的个数A[i],1≤A[i]≤10000
输出
第1行:1个字符串,若Alice能够获胜输出"Alice",否则输出"Bob"样例输入
3 3 2 1
样例输出
Bob
题解
提示给出的证明很妙参考代码
import java.io.*; import java.util.*; public class Main { static final int N=30005; static final int inf=0x3f3f3f3f; public static void main(String[] args) { InputStream sys=System.in; InputReader in=new InputReader(sys); PrintWriter out=new PrintWriter(System.out); int n=in.nextInt(),ans=0; for(int i=1;i<=n;i++) { ans^=in.nextInt(); } out.println(ans==0?"Bob":"Alice"); out.flush(); } static class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next() { while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } public double nextDouble() { return Double.parseDouble(next()); } } }
相关文章推荐
- hihocoder 1163 博弈游戏·Nim游戏
- [hihoCoder1163]博弈游戏·Nim游戏[博弈论]
- #1163 : 博弈游戏·Nim游戏(数学博弈)
- hiho一下 第四十四周 博弈游戏·Nim游戏(直接公式解)
- #1163 : 博弈游戏·Nim游戏
- hiho 1163 博弈游戏·Nim游戏
- NIM:一排石头的游戏
- 编程之美 NIM3 两堆石头的游戏 解法一Java版
- 【BZOJ3105】新Nim游戏(线性基)
- Nim游戏详解
- Nim 游戏及其变形
- [hihoCoder]#1615 : 矩阵游戏II
- [转]NIM取石子游戏
- nim游戏的必胜策略
- 【BZOJ1115】石子游戏Kam【台阶NIM】
- HDOJ S-Nim 1536&POJ S-Nim 2960【求SG函数+Nim游戏】
- [CQOI2013]新Nim游戏
- Nim游戏—改 博弈论 解题报告
- Nim博弈(nim游戏)
- [hdu1536]S-Nim(Nim游戏 博弈)