HDU 2690 Boys and girls(水~)

562 篇文章 1 订阅

Description
在一次聚会上,有一些男孩女孩,现在我们问每一个人他/她看到的女生数量(除自己外),根据这些数量求出在场的女生数,如果不存在合理情况则输出Impossible
Input
第一行为一整数T表示用例组数,每组用例第一行为一整数n表示在场人数,第二行为n个整数表示每个人看到的女生数量
Output
对于每组用例,输出在场女生数量,如果不存在合理情况则输出Impossible
Sample Input
1
3
2 1 1
Sample Output
2
Solution
统计每个女生数量出现的次数flag以及有多少个不同的女生数量cnt并记录女生数量最小值min;如果cnt>2显然不成立,如果cnt=1说明在场要么全是男生要么全是女生,此时需要判断min是否为0,如果min为0说明全是男生输出0,否则判断flag[min+1]是否为n,等于n则说明全是女生输出n,否则不成立;当cnt=2时需判断flag[min]+flag[min+1]是否等于n,不等于n则不成立,等于n时再判断flag[min]是否等于min+1,等于说明女生数量为min+1输出即可,否则不成立,注意n=1时一定不成立,因为不知道这个人到底是男是女
Code

#include<stdio.h>
#include<string.h>
#define maxn 11111
int t,n,flag[maxn];
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        memset(flag,0,sizeof(flag));///初始化 
        scanf("%d",&n);
        int cnt=0,min=1<<30,d;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&d);
            if(!flag[d])
            {
                min=min>d?d:min;//更新女生数量最小值 
                cnt++;//统计有多少不同的女生数量 
            }
            flag[d]++;//统计每个女生数量出现的次数 
        }
        if(cnt>2||n==1)//出现两个以女生数量或者只有一个人时显然不成立 
            printf("Impossible!\n");
        else if(cnt==1)//全男或者全女 
        {
            if(min==0) printf("0\n");//全男 
            else if(min+1==n) printf("%d\n",n);//全女 
            else printf("Impossible!\n");//不成立 
        }
        else if(cnt==2)//部分男部分女 
        {
            if(flag[min]+flag[min+1]==n)//min和min+1这两种数量出现的次数和应为n 
            {
                if(flag[min]==min+1)printf("%d\n",min+1);//女生应该比男生看到的女生数量少一
                else printf("Impossible!\n");//不成立 
            }
            else printf("Impossible!\n");//不成立 
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值