IEEEXtreme 10.0 - Game of Stones
这是 meelo 原创的 IEEEXtreme极限编程大赛题解
Xtreme 10.0 - Game of Stones
题目来源 第10届IEEE极限编程大赛
https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/game-of-stones-1-1
Alice and Bob play a game. The game is turn based: Alice moves first, then Bob, and so on. There are N piles of stones; in every pile there is an odd number of stones. At every turn, the one to play must pick a pile and splits it into 3 piles with an odd number of stones each.
The player who cannot split any pile loses. As this game is too simple for both of them, they decided to play multiple games in parallel. The rules remain the same, but at every turn, the one to play must first pick a game and then split a pile only in that game. The one who loses is the one that can't split any pile in any game, i.e. all the piles in all the games have only 1 stone. Bob still thinks that he is at a disadvantage, since he is the second to move. Your task is to find the winner if both the players play optimally.
Input Format
The input begins with an integer T, giving the number of test cases in the input.
Each testcase begins with an integer G, on a line by itself, giving the number of games to be played in parallel.
The G games are then described in two lines as follows: The first line gives the number of piles in the game, and the second contains the number of stones in each of the piles.
Constraints
1 <= T <= 10
1 <= [Number of piles in all games in a testcase] <= 105
1 <= [Number of stones in a pile] <= 109
Output Format
For each testcase, output the winner, i.e. either Alice or Bob, on a line by itself.
Sample Input
2
2
3
1 3 5
2
3 7
1
5
1 3 5 7 9
Sample Output
Alice
Bob
Explanation
The sample input can be annotated as follows:
2 (the number of tests)
2 (the number of parallel games for the first test)
3 (the number of piles in the first game)
1 3 5
2 (the number of piles in the second game)
3 7
1 (the number of parallel games for the second test)
5 (the number of piles)
1 3 5 7 9
题目解析
石子个数为N的堆,不论分堆的方式,总共有N//2(整除)次分堆的机会,
假设f(N)表示,石子个数为N的堆,总共分堆的次数,
可以验证:f(0)=0, f(1)=0, f(3)=1, f(5)=2, f(7)=3, f(9)=4…… 好心人可以证明一下。
举一个例子:
9=(1,1,7)=(1,1,(1,1,5))=(1,1,(1,1,(1,1,3)))=(1)*9
9=(1,1,7)=(1,1,(1,3,3))=(1,1,(1,(1,1,1),3))=(1)*9
9=(1,3,5)=(1,(1,1,1),5)=(1,(1,1,1),(1,1,3))=(1)*9
9=(1,3,5)=(1,3,(1,1,3))=(1,(1,1,1),(1,1,3))=(1)*9
9=(3,3,3)=((1,1,1),3,3)=((1,1,1),(1,1,1),3)=(1)*9
不论怎么分堆,9个石子最终有4次分堆的机会。
不同堆之间相互独立,所有堆的分堆次数,是每一个堆分堆次数的和;
不同游戏之间相互独立,所有游戏的分堆次数,是每一个游戏分堆次数的和;

其实问题的结果和不同的游戏根本没有关系,仔细想想其实这是出题者在引入额外的复杂性。
Alice或Bob走一步,即分堆一次,分堆次数则减少一次;
在Alice走第一步之前,如果所有游戏的所有堆的分堆次数为奇数则Alice赢,如果为偶数则Bob赢;
既然游戏的输赢只与和的奇偶性有关,对每一堆的分堆次数二进制末位做一位的二进制加法就好了;
然后,一位的二进制加法可以由异或实现。
程序
C++
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std; int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int T;
cin >> T;
for(int t=; t<T; t++){
int G;
cin >> G;
bool alice = false; // initial bob win
for(int g=; g<G; g++) {
int P;
cin >> P;
for(int p=; p<P; p++) {
int n;
cin >> n;
alice ^= (n >> ) & ; // one bit binary addition
}
}
if(alice) {
cout << "Alice" << endl;
}
else {
cout << "Bob" << endl;
}
}
return ;
}
Python3
T = int(input())
for test_case in range(T):
G = int(input())
pile = []
tot_pile =
string = ""
for i in range(G):
tot_pile += int(input())
string += " " + input()
pile = [int(x) for x in string.split()]
tot_turns =
for i in pile:
tot_turns += i//
if tot_turns % == :
print("Bob")
else:
print("Alice")
from: medium.com/xtremefun/xtreme-10-0-game-of-stones-c29aaa72ec1e
博客中的文章均为 meelo 原创,请务必以链接形式注明 本文地址,简书同步更新地址
IEEEXtreme 10.0 - Game of Stones的更多相关文章
- IEEEXtreme 10.0 - Inti Sets
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Inti Sets 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank.c ...
- IEEEXtreme 10.0 - Painter's Dilemma
这是 meelo 原创的 IEEEXtreme极限编程比赛题解 Xtreme 10.0 - Painter's Dilemma 题目来源 第10届IEEE极限编程大赛 https://www.hack ...
- IEEEXtreme 10.0 - Ellipse Art
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Ellipse Art 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank ...
- IEEEXtreme 10.0 - Counting Molecules
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Counting Molecules 题目来源 第10届IEEE极限编程大赛 https://www.hac ...
- IEEEXtreme 10.0 - Checkers Challenge
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Checkers Challenge 题目来源 第10届IEEE极限编程大赛 https://www.hac ...
- IEEEXtreme 10.0 - Playing 20 Questions with an Unreliable Friend
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Playing 20 Questions with an Unreliable Friend 题目来源 第1 ...
- IEEEXtreme 10.0 - Full Adder
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Full Adder 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank. ...
- IEEEXtreme 10.0 - N-Palindromes
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - N-Palindromes 题目来源 第10届IEEE极限编程大赛 https://www.hackerra ...
- IEEEXtreme 10.0 - Mysterious Maze
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Mysterious Maze 题目来源 第10届IEEE极限编程大赛 https://www.hacker ...
随机推荐
- 【CF601C】Kleofáš and the n-thlon
Portal -->CF601C Description 大概是说\(m\)个人参加\(n\)场比赛,每场一人有一个排名,每场没有两个人排名相同,一个人最后的得分是\(n\)场比赛的排名相加,现 ...
- 【bzoj2938】病毒
Portal -->bzoj2938 Solution 这题的话..一开始想的是不是上一个trie就消失了但是后来发现好像我还是太年轻qwq 比较容易联想到..AC自动机,多串匹配嘛 然后就.. ...
- jar包下载地址(fasterxml.jackson)
jar包下载地址(fasterxml.jackson) Home » com.fasterxml.jackson » core jar包下载地址 https://mvnrepository.com/a ...
- HDU--2962
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 分析:最短路+二分. #include<iostream> #include< ...
- C++ ------ 互斥锁、原子操作的性能测试
atomic原子操作:是在新标准C++11,引入了原子操作的概念,并通过这个新的头文件提供了多种原子操作数据类型,例如,atomic_bool,atomic_int等等 测试程序 #include & ...
- .Net并行编程之二:并行循环
本篇内容主要包括: 1.能够转化为并行循环的条件 2.并行For循环的用法:Parallel.For 3.并行ForEach的用法Parallel.ForEach 4.并行LINQ(PLINQ)的用法 ...
- 微信小程序踩过的坑
之前用小程序开发工具做过一个项目了,最近又新开了一个项目,在登录的时候发现总是提示code不合法,找了半天也未发现原因 后来同事提醒是不是因为开发工具里设置的AppId的问题,果断将当前工具里默认Ap ...
- swift4.0中http连接(据于xcode9.3 URLSession)
NSURLSession是NSURLConnection的替代者,在2013年苹果全球开发者大会上(WWDC2013)随iOS7一起发布的,是对NSURLConnection进行了重构优化后的新的网络 ...
- Linux下如何强制中断一个程序的执行?
CTRL + C 中断 CTRL + Z 暂时放到后台 CTRL + D 保存退出
- Python学习笔记(二十)调试
摘抄自: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191557 ...