Codeforces 346A Alice and Bob 博弈
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 346A Alice and Bob 博弈相关的知识,希望对你有一定的参考价值。
http://codeforces.com/problemset/problem/346/A
题意:A和B两个人进行游戏,每人轮流操作,每次从集合(集合元素个数n<=100)取出两个数x,y将|x-y|放入集合中 (|x-y|不存在集合中)不能操作则输
最终游戏结束的标志是无法取出两个数字,他们的差值不在序列中。也就是说,最终状态是一个首项等于公差的等差序列。求出这个等差数列的项数-n,就是游戏进行的回合。
所以我们要先求出首项。设首项为d,接下来就是d+d,d+2d….后面几项都是首项的倍数
差值|x-y|为gcd(x,y)的倍数,所以肯定也为gcd(a1,a2..an)的倍数,首项最小为d=gcd(a1,a2..an)
ans = an / gcd(a1,a2..an) - n;
#include <bits/stdc++.h> using namespace std; const int N=2e5+20; int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int a[N],n; int main() { while(cin>>n) { int mx=0,d; for(int i=0;i<n;i++) { cin>>a[i]; mx=max(mx,a[i]); if(i==0) d=a[i]; else d=gcd(d,a[i]); } int cnt=mx/d-n; //{d,2d,3d...kd,mx} if(cnt%2) puts("Alice"); else puts("Bob"); } return 0; }
以上是关于Codeforces 346A Alice and Bob 博弈的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #201 (Div. 1) / 346A Alice and Bob
Codeforces 346A Alice and Bob 博弈