HDU 5038 Grade

首先给你N个数w[i[,然后根据公式s=10000-(100-w)^2,来求出每个s的值,

然后根据s的每个值出现的频率,来求出最大频率的值是多少,如果计算出的s的每个值出现的频率

都相同的话便输出“Bad Mushroom”,否则输出出现频率出现最高的那个值为多少,如果频率出现次数

最高的值有多个那么便按照升序输出、 根据题意写代码便可、

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1100000;
int n,m;
int k;
int v[maxn];
int w[maxn];
int Msq[maxn];
int main()
{
    int T;
    scanf("%d",&T);
    int kakaka=1;
    while(T--){
        m=0;
        scanf("%d",&n);
        memset(w,0,sizeof(w));
        memset(v,0,sizeof(v));
        for(int i=0;i<n;i++){
            scanf("%d",&Msq[i]);
            int s = 10000-(100-Msq[i])*(100-Msq[i]);
            if(w[s]==0) m++;
            w[s]++;
            v[s]++;
        }
        sort(w,w+10000);
        sort(Msq,Msq+n);
        int falg=0;
        int tmd=0;
        for(int i=0;i<n-1;i++){
            if(Msq[i]!=Msq[i+1])
                tmd=1;
        }
        for(int i=0;i<=10000;i++){
            if(v[i]) falg++;
        }
        if(falg==1){
            if(tmd==1)
                printf("Case #%d:\nBad Mushroom\n",kakaka++);
            else{
                printf("Case #%d:\n",kakaka++);
                for(int i=0;i<=10000;i++){
                    if(v[i]!=0){
                    printf("%d\n",i);
                    break;
                    }
                }
            }
        }
        else
        {
            int mlb=0;
            for(int i=0;i<=10000;i++){
                if(v[i]>mlb)
                    mlb=v[i];
            }
            int cnd=0;
            for(int i=0;i<=10000;i++){
                if(v[i]!=0&&v[i]==mlb)
                    cnd++;
            }
            if(cnd*mlb==n) printf("Case #%d:\nBad Mushroom\n",kakaka++);
            else{
                printf("Case #%d:\n",kakaka++);
                for(int i=0;i<=10000;i++){
                    if(v[i]==mlb&&cnd>1){
                        cnd--;
                        printf("%d ",i);
                    }
                    else if(v[i]==mlb&&cnd==1){
                        printf("%d\n",i);break;
                    }
                }
            }
        }
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值