Description
在CZYZ每个老师都要算绩效,当然,绩效跟完成的任务数量w有关,可以表示为以下公式:s = 10000 - (100 - w)^2。现在呢,校长想算出所有人的绩效,看看其中的众数是多少,如果有多个众数则分别输出。如果不止一种数,所有数出现的频率都一样则不存在众数,输出“Bad Mushroom”(不含引号)。
众数:是一组数据中出现次数最多的数值。
Input
第一行一个整数 T,表示有 T 组数据。
每组数据第一行是一个整数N,表示有N个人;第二行有N个整数用空格隔开,表示每个人完成的任务数量wi。
Output
对于每组数据:首先输出一行“Case #i:”,i表示组数(格式见样例),然后输出一行若干个整数(之间用1个空格隔开),行末无多余空格。如不存在众数,输出“Bad Mushroom”(不含引号)。
Sample Input
3
6
100 100 100 99 98 101
6
100 100 100 99 99 101
6
100 100 98 99 99 97
Sample Output
Case #1:
10000
Case #2:
Bad Mushroom
Case #3:
9999 10000
HINT
数据规模:
对 30%的数据满足:0 < N <= 1000。
对 100%的数据满足:0 < N <= 1000000,0 ,0 < T <= 5。
求众数,果断大模拟。
代码如下
#include <iostream>
#include <cmath>
#include <cstring>
#define SIZE 101
using namespace std;
int count[SIZE];
int main(void)
{
int t, n, i, x, _count, _max, temp, res, k = 0;
scanf("%d", &t);
while (t--)
{
memset(count, 0, sizeof (count));
res = temp = _max = _count = 0;
scanf("%d", &n);
for (i = 1; i <= n; ++i) // 输入
{
scanf("%d", &x);
temp = abs(100 - x);
res = max(res, ++count[temp]); // 求众数的频率
_max = max(_max, temp);
}
for (i = 0; i <= _max; ++i)
{
if (count[i] == res)
{
++_count;
}
}
printf("Case #%d:\n", ++k);
if ((n == _count * res) && (n > 1)) // 必须加上(n > 1),否则玄学WA,90分
{
printf("Bad Mushroom\n");
continue;
}
for (i = _max; ~i; --i)
{
if (count[i] == res)
{
temp = 100 - i;
printf("%d ", 10000 - (100 - temp) * (100 - temp)); // 输出结果
}
}
printf("\n");
}
return 0;
}