AI智能
改变未来

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\");//假设1else if(u%2 && v%2){//假设2if(flag) printf(\"Yes\\n\");else printf(\"No\\n\");}else printf(\"No\\n\");//假设3}return 0;}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C. Similar Pairs(思维)