AtCoder Grand Contest 016 B Colorful Hats 亂搞

Description


有n只貓,每隻貓有一個顏色。每隻貓都會看一看除它以外有多少種顏色,記這個序列爲a[]
現在給出n和a[],問是否存在一個顏色序列滿足給出的限制

Solution


技不如人甘拜下風.jpg

很容易想到全部一樣要咋做。全部一樣的話要麼顏色全部一樣,要麼每種顏色至少兩個,這個判一下就可以了

  假設一共有k種顏色的帽子。
  一個獨一無二的顏色會說k-1其餘說k。
  如果最大的ai減最小的ai大於1一定有假話。
  然後考慮最大值不等於最小值的情況。
  對於說k-1的當然都獨一無二,剩餘的顏色每種至少分配給兩個人。

大力Orz題解

Code


#include <stdio.h>
#include <string.h>
#include <algorithm>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)

const int N=200005;

int a[N];

int read() {
	int x=0,v=1; char ch=getchar();
	for (;ch<'0'||ch>'9';v=(ch=='-')?(-1):(v),ch=getchar());
	for (;ch<='9'&&ch>='0';x=x*10+ch-'0',ch=getchar());
	return x*v;
}

int main(void) {
	int n=read();
	rep(i,1,n) a[i]=read();
	std:: sort(a+1,a+n+1);
	if (a[1]==a[n]) {
		if (a[1]==n-1) return 0&puts("Yes");
		if (a[1]*2<=n) return 0&puts("Yes");
		return 0&puts("No");
	} else if (a[1]+1==a[n]) {
		int s=0;
		rep(i,1,n) s+=(a[i]==a[1]);
		if (a[1]<s||(a[n]-s)*2>n-s) puts("No");
		else puts("Yes");
	} else puts("No");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章