每一回合挑选集合中的两个数x,y, 满足|x−y|不在集合中,然后把|x−y|加到集合里。给出集合最初的n个数问是否先手必胜。
游戏结束的时候最小的数就是这
游戏结束的时候的集合的大小就是结束时最大的数最小的数
这样就可以得出游戏进行的步数,然后就可以得到结果了
#include<bits/stdc++.h>
using namespace std;
const int maxn = 120;
int arr[maxn];
int main(){
int n;
cin>>n;
for(int i = 0;i<n;i++) cin>>arr[i];
int v = arr[0];
for(int i = 1;i<n;i++) v = __gcd(v,arr[i]);
int siz = *max_element(arr,arr+n) / v - n;
cout<<((siz&1)?"Alice":"Bob")<<endl;
return 0;
}
本文介绍了一个基于数学的游戏,玩家轮流从初始集合中选择两个数,计算它们的差并加入集合,直到无法继续。通过计算最大数与最小数的比值,判断先手玩家是否必胜。
602

被折叠的 条评论
为什么被折叠?



