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
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
C - Similar Pairs | GNU C++17 | Accepted | 31 ms | 0 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;
}