[agc016b]Colorful Hats 分类讨论
Description
有n个人,每个人都戴着一顶帽子。当然,帽子有不同的颜色。
现在,每个人都告诉你,他看到的所有其他人的帽子共有多少种颜色,请问你有没有符合所有人的描述的情况。
Input
第一行一个整数n。
第二行n个整数,第i个数ai表示第i个人看到的所有其他人帽子颜色的种数。
Output
若存在一种情况满足条件,输出"Yes",否则输出"No"。(均不含引号)
Sample Input
Sample Input 1
3
1 2 2
Sample Input 2
3
1 1 2
Sample Input 3
5
4 3 4 3 4
Sample Input 4
3
2 2 2
Sample Input 5
4
2 2 2 2
Sample Input 6
5
3 3 3 3 3
Sample Output
Sample Output 1
Yes
Sample Output 2
No
Sample Output 3
No
Sample Output 4
Yes
Sample Output 5
Yes
Sample Output 6
No
HINT
2<=n<=10^5
1<=ai<=n-1
Sol
首先我们发现,可以分两类讨论:
1.最大值唯一2.最大值不唯一
如果是情况一,判断要么\(mx=n\)要么\(mx*2<=n\),表示每种颜色出现次数是1还是大于1,不满足就是No。
如果是情况二,判断如果\(mx-mn>1\)那么无解,因为mn的人一定独一无二,mx的人有重复,这样两个人看别的人只是相差为一,否则不会成立。
然后有解的情况是\(mx>mncnt\),表示至少要算上所有独一无二的颜色以及自己的颜色,然后也要满足\(n-mncnt>=(mx-mncnt)*2\),表示剩下的每种至少要有两个。
Code
#include <cstdio>
int n,a[100005],ok=1,mx,mn,tot;
int main()
{
scanf("%d",&n);mn=n+1;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
if(a[i]<mn) mn=a[i],tot=1;else if(mn==a[i]) tot++;
if(a[i]!=mx&&i>1) ok=0;if(a[i]>mx) mx=a[i];
}
if(ok) (mx==n-1||(mx!=n-1&&mx*2<=n))?puts("Yes"):puts("No");
else (mx!=mn+1||(mx==mn+1&&!(mx>tot&&n-tot>=(mx-tot)*2)))?puts("No"):puts("Yes");
}
[agc016b]Colorful Hats 分类讨论的更多相关文章
- agc016B - Colorful Hats(智商题)
题意 题目链接 有$n$个人,每个人有一种颜色,第$i$个人说除了我之外有$a_i$种不同的颜色,问是否存在一组合法解 Sol 700分的题就这么神仙了么..好难啊... 先说结论吧 设$mx, mn ...
- [agc016B][Colorful Hats]
题目链接 思路 首先,如果没人说谎那么序列中肯定只有一大一小两种数,假设大的数为x,小的数为y.因为对于每个人只有两种情况,要么自己与除自己外的某个人拥有相同的颜色,此时总颜色数就是这个人所能看到的颜 ...
- AGC016B Colorful Hats(构造)
题目大意: 给定n和n个数,每个数a[i]代表除了i外序列中颜色不同的数的个数,问能否构造出来这个数列. 比较简单,首先先求出来a数列的最大值Max, 如果有数小于Max-1,那么显然是不存在的 接下 ...
- [AGC016B] Colorful Hats (结论)
Description 有n个人,每个人都戴着一顶帽子.当然,帽子有不同的颜色. 现在,每个人都告诉你,他看到的所有其他人的帽子共有多少种颜色,请问你有没有符合所有人的描述的情况. Input 第一行 ...
- Codeforces 460D Little Victor and Set --分类讨论+构造
题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
- UVaLive 6862 Triples (数学+分类讨论)
题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...
- 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil
1177: [Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1477 Solved: 589[Submit] Descri ...
- Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array 分类讨论连续递推dp
题意:给出一个 数列 和一个x 可以对数列一个连续的部分 每个数乘以x 问该序列可以达到的最大连续序列和是多少 思路: 不是所有区间题目都是线段树!!!!!! 这题其实是一个很简单的dp 使用的是分 ...
随机推荐
- Opencv3 图片膨胀与腐蚀
#include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...
- 275. H-Index II 递增排序后的论文引用量
[抄题]: Given an array of citations in ascending order (each citation is a non-negative integer) of a ...
- BMP结构详解
位图BITMAPINFOHEADER 与BITMAPFILEHEADER: 先来看BITMAPINFOHEADER,只写几个主要的biSize包含的是这个结构体的大小(包括颜色表) biWidt ...
- Solidity oraclize解析Json格式数据
solidity虽然不能解析json数据但是oraclize_query可以直接处理: pragma solidity ^; import "github.com/oraclize/ethe ...
- vmware centos7 静态ip设置
最近在学习linux环境部署~~~~ 首先,将网络适配设置成为桥接模式 查看本机IP地址,ipconfig,记住ipv4地址和默认网关地址,等会配置的时候要用 启动Centos,进入终端模式,设置IP ...
- css中calc()的使用
calc()是css3中新出现的特性,可以用于动态计算,非常方便. 首先是兼容性 再来看看怎么使用 html{ font-size: 20px; } div{ width: calc(50% - 1p ...
- jquery验证简单示例
来自<jquery 权威指南> 输入某个字符,选择相应的验证类型,并输出验证结果 ----------------------------------- 效果显示: 详细代码: <! ...
- Python 序列与映射的解包操作-乾颐堂
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
- STL扩展容器
string | array | hash 1. string - 可以视为以字符为元素的一种容器, 可以在字符上进行遍历, 提供begin()/end() - 为了支持迭代器和迭代器适配器 , st ...
- mvc中图片的保存和显示
图片保存到网站根目录(例如 D:\www\Web)下 Web 应用程序根目录运算符用“~”表示.注意不是网站根目录(网站根目录是指针对域名计算的) 即便是网站部署在其他网站下(例如IIS中,在A站下( ...