题目链接
题意
给你一组数,然后你可以对数组中每一个数取模 x (x >= 2),问你是否可以使得所有数相等
思路
不存在 1 时,数组中的数按从大到小的顺序依次取模便可以得到 0
存在 1 和 0 时,因为 1 无法取模变成 0 因此不可能使得所有数相等
剩下的情况(即有 1 无 0),看是否存在 2 个数相差 1,不存在 2 个数相差 1 时,每个数可以从大到小依次取模本身 - 1 的数得到 1(在这里因为存在 1,故如果存在 2 时会与 1 相差 1 不满足上一个条件因此不用特判);存在 2 个数相差 1 时无法取模得到 1 因此不可能使得所有数相等
代码
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
#define ioClose() ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define debug printf("\n====================\n");
const int N = 2e5 + 5;
const int mod = 998244353;
int a[N];
int main() {
int T = 1;
cin >> T;
while (T--) {
int n;
cin >> n;
int one = 0, zero = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (a[i] == 0) zero++;
else if (a[i] == 1) one++;
}
if (one == 0) puts("YES");
else if (one != 0 && zero != 0) puts("NO");
else {
sort(a + 1, a + 1 + n);
bool flag = true;
for (int i = 1; i < n && flag; i++)
if (a[i + 1] - a[i] == 1)
flag = false;
puts(flag ? "YES" : "NO");
}
}
return 0;
}