这道题目一开始没有看懂题目意思,后来看了别人的解释!题目大意就是:输入一组数据,通过交换,看是否可以做到相邻的数不相同!
这不就是我们高中学过的排列组合吗?找出相同数的数量,再隔空插进去,插空法!则要求相同数的数量不能大于总数的一半!
#include <iostream>
#include <cstdio>
#include <cstring>
int a[110],b[1010];
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
memset(b,0,sizeof(b));
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
}
int flag=0;
for(i=1; i<=1000; i++)
{
if(b[i]>(n+1)/2)
{
flag=1;
break;
}
}
if(flag)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}