解题思路
题目:Alice 和 Bob 在玩游戏,他们面前有 n 堆石子,对于这些石子他们可以轮流进行一些操作,不能进行下去的人则输掉这局游戏。
可以进行两种操作:
① 把石子数为奇数的一堆石子分为两堆正整数个石子
② 把两堆石子数为偶数的石子合并为一堆
Alice 先操作,谁能最后赢得比赛。
假设 n 个数字中,其中有 even 个偶数。
- 将一个奇数
a分成两个正整数,可以操作a / 2次,得到a / 2个偶数和 1 个 1,将操作次数计入cnt。
此时,已操作cnt次,且有even + cnt个偶数,n - even个 1,1 已不可操作。 - 合并
even + cnt个偶数,可以操作even + cnt - 1次,计入cnt。
C++代码
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
int a;
int even = 0;
int cnt = 0;
for(int i=0; i<n; ++i){
cin >> a;
if(a % 2 == 0)
++even;
else
cnt += a / 2;
}
cnt += even + cnt - 1;
if(cnt % 2 == 1){
cout << "Alice" << endl;
}
else{
cout << "Bob" << endl;
}
return 0;
}
京公网安备 11010502036488号