codeforces#347div2 C. Alice and Bob

来源:互联网 发布:网络醉了是什么意思 编辑:程序博客网 时间:2024/06/04 20:07

题目链接:传送门
题意:给个n长度的等差数列,A开始,A,B两人轮流每次从这里面选任意两个数x和y,然后判断序列有没有|x-y|,如果没有就把|x-y|加进序列,如果没有就说明这个人没的选了,算输。输出胜利的一方。
写几个数据把所有的情况求出来,最后序列的一定是若干个小于Max(序列最大)的数。
并且每个数都是原序列所有数的gcd值的倍数,所以最后的数量变成了(Max/gcd-n)
如果这个值是偶数就说明A最后没得选了
代码如下:

`#include<cstring>#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int gcd(int a, int b) {    return (b==0)?a:gcd(b,a%b);}#define N 110int a[N];int main(){    int i,j,n,m;    while(scanf("%d",&n)!=EOF){            int Max=0;        for(i=1;i<=n;i++)            cin>>a[i];        sort(a,a+1+n);        int res=a[n];        for(i=1;i<n;i++)        for(j=i+1;j<=n;j++){            res=gcd(res,gcd(a[i],a[j]));        }        int x=(a[n]/res)-n;        if(x%2==0) cout<<"Bob"<<endl;        else cout<<"Alice"<<endl;    }    return 0;}`
0 0
原创粉丝点击