大胆猜想,不要求证。
发现 (2x-y=x+x-y),可以看做加上差。
而题目又对数的范围没有要求,感性理解一下,通过加加减减消去多余的东西我们可以任意操作差的个数。
根据裴蜀定理,只要 (gcd|k) 就可以构造,时间复杂度 (O(sum nlog n+sumlog x))。
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define For(i,x,y)for(i=x;i<=(y);i++)
ll a[200005];
ll read()
{
ll A;
bool K;
char C;
C=A=K=0;
while(C<'0'||C>'9')K|=C=='-',C=getchar();
while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
return(K?-A:A);
}
ll gcd(ll _,ll __)
{
return(!_?__:gcd(__%_,_));
}
int main()
{
ll k,s;
int t,n,i;
t=read();
while(t--)
{
n=read(),k=read();
For(i,1,n)a[i]=read();
sort(a+1,a+n+1);
s=a[2]-a[1];
For(i,2,n-1)s=gcd(s,a[i+1]-a[i]);
For(i,1,n)
if(!((a[i]-k)%s))break;
puts((i>n?"NO":"YES"));
}
return 0;
}