题目大意:给出一个计算公式,计算给出数列中数的值,如果出现最多次数就输出,若所有值次数都一样,输出“Bad Mashroom”.
解题思路:太伤心了,每次都只差一道题呀,哎...又挂在边上了,实力太弱了。这是北京网赛的签到题吧,直接模拟即可,但有一个坑是所有数计算出来的值都相等的时候不能判NO。详见code。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=5038
code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1e6;
int t,n,num,s,maxm,maxs;
int data[MAXN];
int main(){
//freopen("input.txt","r",stdin);
scanf("%d",&t);
int k=0;
while(t--){
scanf("%d",&n);
maxm=maxs=0;int c=0;
memset(data,0,sizeof(data));
for(int i=0;i<n;++i){
scanf("%d",&num);
s=10000-(100-num)*(100-num);
if(!data[s]) c++;
if(s>maxs) maxs=s;
data[s]++;
if(data[s]>maxm) maxm=data[s];
}
if(c*maxm==n && c>1){
printf("Case #%d:\n",++k);
printf("Bad Mushroom\n");continue;
}
int flag=0;
printf("Case #%d:\n",++k);
for(int i=0;i<=maxs;i++){
if(data[i]==maxm){
if(flag) printf(" ");
flag=1;
printf("%d",i);
}
}
printf("\n");
}
return 0;
}