AtCoder Grand Contest 018 A Getting Difference(比较水。。。)

来源:互联网 发布:java文件上传原理 编辑:程序博客网 时间:2024/06/07 00:50

http://agc018.contest.atcoder.jp/tasks/agc018_a
题意:给你N个数,每次取出两个数,再把他们差的绝对值连同这俩数扔进去,求能不能得到K。
题解:第一种情况,K膜这些数的GCD不为零是肯定做不到的,想一想就知道了嘛。。。第二种K大于最大的数也是做不到的,其他情况都可以做到。。。

//库省略using namespace std;int n,k;int a[100005];bool f,f2;int gcd(int a, int b){    if(b == 0)        return a;    return gcd(b, a % b);}int main(){    cin>>n>>k;    if(n==1)    {        int a;        cin>>a;        if(a==k)            cout<<"POSSIBLE";        else            cout<<"IMPOSSIBLE";        return 0;    }    int g=1;    for(int i=0;i<n;i++)    {        cin>>a[i];        if(i==1)            g=gcd(a[0],a[1]);        else            if(i>1)            {                int t=g;                g=gcd(t,a[i]);            }        if(a[i]>=k)            f=1;    }    if(!f || k%g!=0)    {        cout<<"IMPOSSIBLE";    }    else    {        cout<<"POSSIBLE";    }    return 0;}
原创粉丝点击