题解:AT_agc016_b [AGC016B] Colorful Hats
题意
有
思路
首先观察样例,很容易将输入分成两类去判断。第一种是所有猫看到的帽子颜色的数量全部相等,另一种是不相等。
先考虑第一种:此时发现,如果所有猫能看到的都等于
接下来考虑第二种情况:不难得出如果看到颜色最多的猫看到的颜色比看到颜色最少的猫看到的颜色多超过一种,那么是不满足的。因为一只猫的帽子只有一种颜色,所以每只猫最多只会看不到自己的帽子的颜色,不可能大于
代码
#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
if(a[1]==a[n]&&(a[1]==n-1||a[1]<=n/2)){
cout<<"Yes";
return 0;
}
else if(a[n]-a[1]==1){
int tmp=1;
for(tmp;a[tmp]==a[tmp+1];tmp++){}//找到两种猫的分界处
if((n-tmp)/2+tmp>=a[n]&&tmp<=a[1]){//满足条件
cout<<"Yes";
return 0;
}
}
cout<<"No";
return 0;
}
AC 记录。