C. Similar Pairs(思维)

C. Similar Pairs

问:给出一个数组,求是否能够使所有的数都可以“类似”匹配。
”类似“:两个数具有相同的奇偶性,或差的绝对值为1。

思路:我们求出奇数的个数x,偶数的个数y,相邻元素的对数z。
如果x是偶数,y是偶数,那对于每个元素都可以找到一个匹配。
如果x是奇数,y是奇数,那只要z>0,就可以用一个奇数一个偶数凑成一对。剩下的就成了上面的情况了。
如果x,y是一奇一偶,那就一定不能凑成对。因为要用到z的话x,y都会消耗,x,y始终都是一奇一偶,回到刚开始的问题。

#include<bits/stdc++.h>
using namespace std;
int s[110];
int main() {
    
    
	int t, n, x, u, v, flag;
	cin >> t;
	while(t--) {
    
    
		memset(s, 0, sizeof s);
		u = 0, v = 0, flag = 0;
		cin >> n;
		for(int i=0; i<n; i++) {
    
    
			scanf("%d", &x);
			s[x] = 1;//用个数组记录是否
			if(s[x-1] || s[x+1]) flag = 1;//判断有无相邻成对
			if(x % 2) u++;//奇数
			else v++;//偶数
		}
		if(!(u%2) && !(v%2)) printf("Yes\n");//假设1
		else if(u%2 && v%2){
    
    //假设2
			if(flag) printf("Yes\n");
			else printf("No\n");
		}
		else printf("No\n");//假设3
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45363113/article/details/106863418