[AGC016B] Colorful Hats (结论)

版权声明:转载写明出处 https://blog.csdn.net/Astinli/article/details/81876807

Description

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

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

Input

第一行一个整数n。

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

Output

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

题解:

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

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

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

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

那只要 n 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;
}

猜你喜欢

转载自blog.csdn.net/Astinli/article/details/81876807