题目链接A - Getting Difference

题意

有n(1~\(10^5\))个数\(A_i\) (1$10^9$),每次选两个数,将它们的差的绝对值加入这堆数。问k(1\(10^9\))是否可能出现在这堆数中。

题解

因为选择的数的差一定是这两个数的gcd的倍数,因此可以令g为所有数的gcd,那么g的不超过数组中最大值的倍数都是可以得到的。

代码

#include <cstdio>
#define N 100005
int gcd(int a,int b){
	return b?gcd(b,a%b):a;
}
int n,k;
bool ans;
int a[N];
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i)
		scanf("%d",&a[i]),ans|=a[i]>=k;
	int g=a[1];
	for(int i=2;i<=n;++i)
		g=gcd(a[i],g);
	ans&=(k%g==0);
	puts(ans?"POSSIBLE":"IMPOSSIBLE");
	return 0;
}

ps.我才不会说我gcd写错给wa了两次。


┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆