HDU 5038 Grade

来源:互联网 发布:出国需要下载什么软件 编辑:程序博客网 时间:2024/05/17 01:06

题意:t组测试样例,每组n个蘑菇,给出n个蘑菇的重量,蘑菇的价值是10000-(100-w)^2,输出出现频率最多的价值,如果有多个,按照升序输出,如果价值不相等,并且所有价值出现的频率一样,就输出Bad Mushroom

解体思路:模拟.用map存储价值以及价值出现的次数,先求出出现的最大频率,然后找有没有比这个频率小的,如果没有的话就分为两种情况,一种是价值都相等,那么随便输出一个就行了,如果价值不等但是频率出现的都一样,就输出Bad Mushroom。举个例子:2 2 2 2 2 2输出2,2 2 2 3 3 3输出Bad Mushroom。map是自动按照升序排列的,所以直接输出即可

代码:

#include <iostream>#include <algorithm>#include <string>#include <cstring>#include <cmath>#include <cstdio>#include <map>using namespace std;map<int,int> m;int main(){    int t;    scanf("%d",&t);    int cnt=0;    while(t--)    {        m.clear();        int n;        scanf("%d",&n);        int x;        for(int i=0; i<n; i++)        {            int w;            scanf("%d",&w);            int k=10000-(100-w)*(100-w);            x=k;            m[k]++;        }        int maxx=0;        map<int,int>::iterator it=m.begin();        for(; it!=m.end(); it++)        {            maxx=max(it->second,maxx);        }        int ok=0;        map<int,int>::iterator it1=m.begin();        for(; it1!=m.end(); it1++)        {            if(it1->second<maxx)ok=1;        }        printf("Case #%d:\n",++cnt);        if(m.size()==1)        {            printf("%d\n",x);        }        else if(m.size()==n)        {            printf("Bad Mushroom\n");        }        else if(!ok)        {            printf("Bad Mushroom\n");        }        else        {            map<int,int>::iterator it2=m.begin();            int flag=1;            for(; it2!=m.end(); it2++)            {                if(it2->second==maxx)                {                    if(!flag)                    {                        printf(" %d",it2->first);                    }                    else                    {                        printf("%d",it2->first);                        flag=0;                    }                }            }            printf("\n");        }    }    return 0;}


原创粉丝点击