您的位置:首页 > 理论基础 > 计算机网络

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

2015-07-19 23:44 513 查看

题意:有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[10010];

int v[10010] ;

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 = 1 ;
while(T--)
{
memset(v, 0, sizeof(v));
int n ;
scanf("%d" , &n) ;
int a ;
int i , j ;
int k = 0 ;
for (i = 0 ; i < n ; i++)
{
scanf("%d" , &a) ;
int t = 10000 - (100 - a) * (100 - a);
if (v[t] == 0)
{
v[t]++;
save[k].cnt = 0 ;
save[k].num = t ;
k++ ;
}
else
v[t]++;
}
for (i = 0 ; i < k ; i++)
save[i].cnt = v[save[i].num] ;
sort(save , save+k , cmp) ;
int m = 1 ;
for (i = 0; i < k - 1; i++)
{
if (save[i].cnt == save[i + 1].cnt)
m++;
else
break;
}
printf("Case #%d:\n" , Case++) ;
if (m == k && k!=1)
{
printf("Bad Mushroom\n") ;
continue ;
}
for (i = 0; i < m-1; i++)
printf("%d " , save[i].num) ;
printf("%d\n" , save[m-1].num) ;
}

return 0 ;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: