#95-[模拟]绩效等级

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值