CodeForces1360C - Similar Pairs - 思维+暴力
题意
给出T组数据,每组数据给出一个n,接下去给出一个长度为n的数组。(n是偶数)
我们现在需要将数组中的元素分为两个一组,
问所有的分组中每个元素是否满足:差值为1 或 奇偶性一样
全部分组都满足则输出YES,否则输出NO
思路
情况一 特判:
奇数和偶数的个数一样 且 个数都为偶数。如果奇数的个数ji为偶数,因为n是偶数,所以说明偶数的个数ou也为偶数,这种情况直接输出YES
情况二:
奇数和偶数的个数不一样。如果奇数的个数ji为奇数,同理,偶数的个数ou也必为奇数。所以我们只需要对所有元素进行排序,判断是否存在差值为1的元素对即可。注意后面输出NO的条件是 if(ji&1&&!flag)
,而不是 if(!flag)
,不要搞错了。
AC代码
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
int a[55];
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
int ji=0,ou=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]&1) ji++;//x[cnt1++]=ji;
else ou++;//y[cnt2++]=ou;
}
// sort(x,x+cnt1),sort(y,y+cnt2);
//ji&1==0间接相当于ou&1==0,因为n是偶数
if(ji&1==0)
cout<<"YES"<<endl;
else
{
// 如果奇数个数为奇数
// 那么偶数个数也必为奇数
sort(a,a+n);
bool flag=0;
for(int i=1;i<n;i++)
{
if(a[i]-a[i-1]==1)
{
flag=1;
break;
}
}
// if(flag)
// cout<<"YES"<<endl;
if(ji&1&&!flag)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
}
return 0;
}
分类:
暴力/贪心/水题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」