hdu 5038 (2014北京网络赛G 排序水题)

时间:2022-01-20 19:35:50

题意:有n个数字,带入10000 - (100 - ai) ^ 2公式得到n个数,输出n个数中频率最大的数,如果有并列就按值从小到大都输出输出,如果频率相同的数字是全部的n个数,就输出Bad。。。。
题解:统计数字个数和频率,排序后输出。

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

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <cmath>
# define LL long long
using namespace std ; struct Num
{
int cnt ;
int num ; }save[]; int v[] ; bool cmp(Num x , Num y)
{
return (x.cnt == y.cnt && x.num < y.num ||x.cnt > y.cnt) ;
} int main ()
{
//freopen("in.txt","r",stdin) ;
int T ;
scanf("%d" , &T) ;
int Case = ;
while(T--)
{
memset(v, , sizeof(v));
int n ;
scanf("%d" , &n) ;
int a ;
int i , j ;
int k = ;
for (i = ; i < n ; i++)
{
scanf("%d" , &a) ;
int t = - ( - a) * ( - a);
if (v[t] == )
{
v[t]++;
save[k].cnt = ;
save[k].num = t ;
k++ ;
}
else
v[t]++;
}
for (i = ; i < k ; i++)
save[i].cnt = v[save[i].num] ;
sort(save , save+k , cmp) ;
int m = ;
for (i = ; i < k - ; i++)
{
if (save[i].cnt == save[i + ].cnt)
m++;
else
break;
}
printf("Case #%d:\n" , Case++) ;
if (m == k && k!=)
{
printf("Bad Mushroom\n") ;
continue ;
}
for (i = ; i < m-; i++)
printf("%d " , save[i].num) ;
printf("%d\n" , save[m-].num) ;
} return ;
}