天天看点

HDU 5038 水

用给出的公式求出每个蘑菇的grade,求出现次数最多的grade。如果有多个grade出现的次数一样多,且还有其他的grade,则把这些出现次数最多的grade按升序输出;否则,输出“Bad Mushroom”。注意当方案数只有一种的时候直接输出这个方案。

程序乱搞。。。 用很难看的姿势A掉了。。。

#include "stdio.h"
#include "string.h"
int main()
{
    int Case,ii,n,x,key,ans,ans2,first,i; // key记录答案数是否唯一,ans2记录次小值
    int hash[10010];
    scanf("%d",&Case);
    for (ii=1;ii<=Case;ii++)
    {
        scanf("%d",&n);
        memset(hash,0,sizeof(hash));
        while (n--)
        {
            scanf("%d",&x);
            hash[10000-(100-x)*(100-x)]++;
        }
        printf("Case #%d:\n",ii);
        key=0;
        ans=0;
        ans2=0;

        for (i=0;i<=10000;i++)
        if (hash[i]>ans)
        {
            key=1;
            ans2=ans;
            ans=hash[i];
        }
        else
        if (ans==hash[i] && hash[i]!=0)
            key++;
        else
        if (hash[i]<ans && hash[i]!=0)
            ans2=hash[i];


        if (key>1 && ans2==0)
        {
            printf("Bad Mushroom\n");
            continue;
        }

        first=1;
        for (i=0;i<=10000;i++)
            if(hash[i]==ans)
        {
            if (first==0) printf(" ");
            first=0;
            printf("%d",i);
        }
        printf("\n");



    }
    return 0;
}