zoukankan      html  css  js  c++  java
  • [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;
    }
    
  • 相关阅读:
    php 克隆和引用类
    php 抽象类、接口和构析方法
    php 面向对象之继承、多态和静态方法
    php封装练习
    php 面向对象之封装
    php 简单操作数据库
    php 练习
    用php输入表格内容
    php 指针遍历、预定义数组和常用函数
    php 数组定义、取值和遍历
  • 原文地址:https://www.cnblogs.com/ezoiLZH/p/9507829.html
Copyright © 2011-2022 走看看