GDCPC广东省大学生程序设计竞赛(正式赛)
G-Good Game, GG
题意:
Alice和Bob在玩游戏,最初有n个整数,Alice可以选择将一个奇数拆分成两个正数或者删除一个为1的整数,Bob可以选择将一个偶数拆分成两个正数。Alice先动,若Alice先无法移动,则Bob赢,反之,则Alice赢。两个玩家移动为最佳移动,找出最后的赢家。
思路:
偶数拆成两个偶数,奇数只能拆成一奇一偶,最优解则Bob每次选择的偶数都-2,看最后能拆分出几个2,而Alice选择的偶数,计算出偶数最多能拆分成几个2,然后两个计数相比,若Bob的<Alice的,则Alice赢,反之则Bob赢。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
long long int n;cin>>n;
while(n--)
{
long long int t;cin>>t;
long long int ji=0,ou=0;
while(t--)
{
int a;cin>>a;
if(a%2==0)//偶数计算
ou+=(a-2)/2;
else//奇数计算
ji+=(a+1)/2;//向上取整
}
if(ou<ji)//Bob能拆分的小于Alice的
cout<<"Alice"<<endl;
else
cout<<"Bob"<<endl;
}
return 0;
}