题意:
给定一个数列,k可任选,每次操作可以把所有数都模k,可以操作很多次,问最终能否把数组全部变成一样的数
思路:
因为k不确定,因此可以往构造方面去想
在满足条件的前提下去考虑特殊情况和极端情况
每次操作k取当前数组最大值,这样最大值一个个的都变成0,我们希望最终所有数都变成0
但是因为k>=2,所以当数组中0和1同时存在时,是不合法的
当数组中出现相邻的数时,是不合法的,因为这样模最大值之后0和1同时存在了
Code:
#include <bits/stdc++.h>
using namespace std;
const int mxn=1e5+10;
int n,cnt1=0;
int a[mxn];
void solve(){
cnt1=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==1) cnt1++;
}
if(!cnt1){
cout<<"YES"<<'\n';
return;
}
sort(a+1,a+1+n);
for(int i=2;i<=n;i++){
if(a[i]==a[i-1]+1){
cout<<"NO"<<'\n';
return;
}
}
cout<<"YES"<<'\n';
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;cin>>__;
while(__--)solve();return 0;
}