1、题目意思:将数组中的数进行排列,任意相邻两个数的和都相等,才能说这个数组为好。一下分三种情况讨论。 2、当数组中有三种及三种以上的数字,那任意相邻两个数的和都相等必然无法成立。 3、当数组中只有一种数字的时候,则必然是好数组。 4、当数组中有两种数字就统计两个数字出现的个数,个数绝对值差1或者0,即可以排列形成好数组。
1、题目意思:将数组中的数进行排列,任意相邻两个数的和都相等,才能说这个数组为好。一下分三种情况讨论。
2、当数组中有三种及三种以上的数字,那任意相邻两个数的和都相等必然无法成立。
3、当数组中只有一种数字的时候,则必然是好数组。
4、当数组中有两种数字就统计两个数字出现的个数,个数绝对值差1或者0,即可以排列形成好数组。
#include #include #include using namespace std; int main() { int t; cin >> t; while (t--) { int n; cin >> n; mapmp ; int flag = 0; for (int i = 0; i < n; i++) { int tep; cin >> tep; mp[tep]++; } if (mp.size() > 2) cout << "NO" << endl; else if(mp.size()==1) cout<< "YES" << endl; else if(mp.size()==2) { int a[2],k=0; for (auto i : mp) { a[k++] = i.second; } flag = abs(a[0] - a[1]); if (flag == 1||flag==0) cout << "YES" << endl; else cout << "NO" << endl; } } }