hdu - 5038 - Grade(模拟)

来源:互联网 发布:mysql添加主外键约束 编辑:程序博客网 时间:2024/05/17 06:51

题意:N个(1<=N<=10^6)蘑菇,每个蘑菇相应的重量wi (0 < wi < 200),每个蘑菇的分数为 s = 10000 - (100 - wi) ^ 2,输出出现频率最大的 s;如果出现频率最大的 s 有多个并且还有其他小的出现频率的分数,则对于出现频率最大的 s,按 s 的大小从小到大依次输出;如果出现频率最大的 s 有多个并且没有其他小的出现频率了,则输出"Bad Mushroom"。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5038

——>>题意晦涩难懂的水模拟。。敲打

#include <cstdio>#include <cmath>#include <algorithm>using std::sort;const int MAXN = 100 + 10;struct GRADE{    int grade;    int f;    bool operator < (const GRADE& e) const    {        return f > e.f || (f == e.f && grade > e.grade);    }} g[MAXN];int kase;void Init(){    for (int i = 0; i <= 99; ++i)    {        g[i].f = 0;    }}void Read(){    int N, w, grade;    scanf("%d", &N);    for (int i = 0; i < N; ++i)    {        scanf("%d", &w);        grade = abs(w - 100);        ++g[grade].f;        g[grade].grade = grade;    }}void Solve(){    sort(g, g + 100);    printf("Case #%d:\n", ++kase);    if (g[0].f > g[1].f)    {        printf("%d\n", 10000 - g[0].grade * g[0].grade);    }    else    {        bool other = false;        int i;        for (i = 1; i <= 99; ++i)        {            if (g[i].f > 0 && g[i].f != g[i - 1].f)            {                other = true;                break;            }            if (g[i].f == 0) break;        }        if (!other)        {            puts("Bad Mushroom");        }        else        {            printf("%d", 10000 - g[0].grade * g[0].grade);            for (int j = 1; j < i; ++j)            {                printf(" %d", 10000 - g[j].grade * g[j].grade);            }            puts("");        }    }}int main(){    int T;    kase = 0;    scanf("%d", &T);    while (T--)    {        Init();        Read();        Solve();    }    return 0;}


0 0
原创粉丝点击