赞
踩
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是否成立即可.
#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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。