• [AGC016B] Colorful Hats (结论)


    Description

    有n个人,每个人都戴着一顶帽子。当然,帽子有不同的颜色。

    现在,每个人都告诉你,他看到的所有其他人的帽子共有多少种颜色,请问你有没有符合所有人的描述的情况。

    Input

    第一行一个整数n。

    第二行n个整数,第i个数ai表示第i个人看到的所有其他人帽子颜色的种数。

    Output

    若存在一种情况满足条件,输出"Yes",否则输出"No"。(均不含引号)

    题解:

    看起来就像是(玄学)结论题……

    首先很明显的是,最大值和最小值的差不能大于1。

    那我们先考虑最大值等于最小值的情况,首先全部都是1或者n-1都是合法的。

    那其他的,每种颜色至少要有两顶或以上的帽子(任取一种可以看到的为另外几个和自己一样的和其他不同的)

    那只要 ({n over 颜色数}geq 2),即为合法。

    那如果最大值不等于最小值,那么小的的那些帽子的颜色肯定都是独一无二的。

    大的颜色肯定每种颜色的帽子都至少要有两顶。

    那么把小的颜色总数减去,剩下的颜色填到剩下的空位去,看看能不能使剩下的颜色每种都有至少两个。

    CODE:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int n,x,cnt=0;
    int minv=1e9,maxv=-1e9;
    
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		scanf("%d",&x);
    		if(x==minv)cnt++;
    		if(x<minv)minv=x,cnt=1;
    		if(x>maxv)maxv=x;
    	}
    	if(maxv-minv>1)return printf("No"),0;
    	if(maxv==minv){
    		if(minv==n-1)return printf("Yes"),0;
    		return printf(n/minv>=2?"Yes":"No"),0;
    	}
    	int a=n-cnt,b=maxv-cnt;
    	if(b<1)return printf("No"),0;
    	return printf(a/b>=2?"Yes":"No"),0;
    }
    
  • 相关阅读:
    Docker 系列(四):Docker 容器数据卷简单使用
    【QML 动态对象】使用JS中的语句动态创建和销毁组件
    【QML 动态对象】Loader动态加载组件
    vue-cli2.0全局使用sass变量
    两边+居中 布局
    跳转子路由后左侧菜单跳转为空白页,路由地址出错
    el-tree可搜索单选
    el-tree固定高度加滚动条
    前端 权限控制 方式
    综合分析类
  • 原文地址:https://www.cnblogs.com/ezoiLZH/p/9507829.html
Copyright © 2020-2023  润新知