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;
}