ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【题解】AT2386:[AGC016B] Colorful Hats

2020-12-03 19:33:03  阅读:261  来源: 互联网

标签:cnt 帽子 Colorful int 题解 Hats a1 ai getchar


@luogu
手摸几个样例之后我们可以发现,每个人看到的帽子数之差必然<=1
然后我们根据 a 1 . . . a n a_1...a_n a1​...an​排序
然后

  • a 1 = a n a_1=a_n a1​=an​,意思是,每个人看到的帽子个数相同,那么有两种情况,一种是所有人都不相同,那么 a i a_i ai​必须满足 a i = n − 1 a_i=n-1 ai​=n−1;或者是帽子情况被分成了几段,每段的个数>1,就是 2 a i < = n 2a_i<=n 2ai​<=n。以上两种情况都是yes,否则no
  • a 1 + 1 = a n a_1+1=a_n a1​+1=an​,然后 a i = a 1 a_i=a_1 ai​=a1​的话,那么 i i i的帽子是独一无二的, a i = a n a_i=a_n ai​=an​的话,那么 i i i存在另一个人与 i i i帽子颜色相同,所以令 a i = a 1 a_i=a_1 ai​=a1​的个数为 c n t cnt cnt,满足 c n t < a n 且 2 ( a n − c n t ) < = n − c n t cnt<a_n且2(a_n-cnt)<=n-cnt cnt<an​且2(an​−cnt)<=n−cnt就是yes,否则no
  • a 1 + 1 < a n a_1+1<a_n a1​+1<an​,直接no

Code:

#include <bits/stdc++.h>
#define maxn 100010
using namespace std;
int a[maxn], n;

inline int read(){
	int s = 0, w = 1;
	char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
	for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
	return s * w;
}

int main(){
	n = read();
	for (int i = 1; i <= n; ++i) a[i] = read();
	sort(a + 1, a + 1 + n);
	if (a[n] > a[1] + 1) return puts("No"), 0;
	if (a[1] == a[n]){
		if (a[1] * 2 <= n || a[1] + 1 == n)
			puts("Yes");
		else puts("No");
	} else{
		int cnt = 0;
		for (int i = 1; i <= n; ++i)
			if (a[i] == a[1])
				++cnt;
			else break;
		if (cnt < a[n] && (a[n] - cnt) * 2 <= (n - cnt))
			puts("Yes");
		else puts("No");
	}
	return 0;
}

标签:cnt,帽子,Colorful,int,题解,Hats,a1,ai,getchar
来源: https://blog.csdn.net/ModestCoder_/article/details/110562031

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有