题意:
解法:
2x-y=x+(x-y),
将x和y看作数轴上的点,那么2x-y就是y关于x的对称点.
题目等价于给定点可以任意对称,判断k是否是其中的某个点.
容易发现最后点与点之间的间隙一定是相邻a(i)差值的gcd,
设这个gcd=g,那么就是判断x+tg=k是否存在,
枚举x=a[i],判断(k-a[i])%g=0是否成立即可.
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=2e6+5;
int a[maxm];
int n,k;
void solve(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int g=0;
for(int i=2;i<=n;i++){
g=__gcd(g,a[i]-a[i-1]);
}
for(int i=1;i<=n;i++){
if((k-a[i])%g==0){
cout<<"YES"<<endl;
return ;
}
}
cout<<"NO"<<endl;
}
signed main(){
ios::sync_with_stdio(0);
int T;cin>>T;
while(T--){
solve();
}
return 0;
}
版权声明:本文为weixin_44178736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。