题目

现在规定,若两个数 x 和 y 具有相同的奇偶性,或者 |x-y|=1,则称它们相似。
给定一个由 n 个正整数构成的数组(n 是偶数)。
检查数组是否有这样的成对划分,即数组的每个元素恰好属于一对,并且每对中的数字彼此相似。

解题思路

如果 n 个数中奇数的个数为偶数,则可以根据奇偶性划分对。
否则,需要查找是否有存在两个整数满足 |x-y|=1,若存在,则这两个数属于一对,其他根据奇偶性划分对。
如果上面两个条件均不符合,则不能成对划分。

C++代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main(){
    int t, n;
    cin >> t;
    while(t--){
        cin >> n;
        vector<int> a(n);
        int cnt = 0;
        for(int i=0; i<n; ++i){
            cin >> a[i];
            if(a[i]%2)
                ++cnt;
        }
        bool flag = false;
        if(cnt%2==0)
            flag = true;
        else{
            sort(a.begin(), a.end());
            for(int i=1; i<n; ++i){
                if(a[i]-a[i-1]==1){
                    flag = true;
                    break;
                }
            }
        }
        if(flag)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
    return 0;
}