当前位置: 代码迷 >> 综合 >> hdu - 5038 - Grade(模拟)
  详细解决方案

hdu - 5038 - Grade(模拟)

热度:49   发布时间:2024-01-10 12:53:34.0

题意: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;
}