[codeforces 1360C] Similar Pairs 坑点较多

Codeforces Round #644 (Div. 3)  参赛人数20688

[codeforces 1360C]    Similar Pairs   坑点较多

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

在线测评地址http://codeforces.com/contest/1360/problem/C

ProblemLangVerdictTimeMemory
C - Similar Pairs GNU C++17Accepted31 ms0 KB

举几个坑点数据

Input:
1
6
1 3 5 8 10 12
Output:
No
 
Input:
1
4
1 2 4 7
Output:
YES

 

Input:
1
4
1 2 3 4
Output:
YES

AC代码如下

#include <cstdio>
#include <algorithm>
using namespace std;
int a[55],vis[55];
int main(){
	int t,n,i,j,cnt0,cnt1,cnt;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		for(i=1;i<=n;i++)scanf("%d",&a[i]);
		sort(a+1,a+1+n);//自小到大排序
		cnt0=cnt1=cnt=0;
		for(i=1;i<=n;i++)
			if(a[i]%2)cnt1++;
			else cnt0++;
		if(!cnt1)printf("YES\n");//数组元素值全是奇数
		else if(!cnt0)printf("YES\n");//数组元素值全是偶数
		else{//cnt1!=0,cnt0!=0
			int flag=0;
			for(i=1;i<=n;i++)vis[i]=0;
			for(i=1;i<=n;i++)
				for(j=i+1;j<=n;j++)
					if(a[j]-a[i]==1&&vis[j]==0){cnt++,vis[j]=1;break;}//a[i]已经找到匹配值,就无需再找了,同时别忘了a[j]需打上标识
			for(i=0;i<=cnt;i++){//cnt是全都按差值为1配对,最多能配对的对数,具体配对可配0对,1对,2对,......,cnt对
				cnt1-=i,cnt0-=i;
				if(cnt1%2==0&&cnt0%2==0){printf("YES\n"),flag=1;break;}//需要检验,看cnt1,cnt0是否都能配成偶数个对。
			}
			if(!flag)printf("NO\n");
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值