我的代碼,想到了桶排序(就是標記出現的次數),不過效率很低,以後再看有沒可以改進
#include<iostream>
#include<cmath>
using namespace std;
int num[101];
int fun(int num)
{
return (10000-pow((100-num),2));
}
int main()
{
int t,n;
cin>>t;
for(int j=1;j<=t;j++)
{
cin>>n;
memset(num,0,sizeof(num));
int weight,max,max_n;max=-1;
for(int i=1;i<=n;i++)
{
cin>>weight;
num[100-(int)abs(100-weight)]++;
if(num[100-(int)abs(100-weight)]>max)
{
max=num[100-(int)abs(100-weight)];
max_n= 100-(int)abs(100-weight);
}
}
cout<<"Case #"<<j<<":"<<endl;
if(max>n/2)
cout<<fun(max_n)<<endl;
else
{ int sum=0;int sum_l=0;
for(int i=0;i<=100;i++)
{
if(num[i]==max)
{
sum+=num[i];
sum_l++;
}
}
if(sum==n)
{
cout<<"Bad Mushroom"<<endl;
}
else
{
for(int i=0;i<=100;i++)
{
if(num[i]==max)
{
cout<<fun(i);
sum_l--;
if(sum_l)
cout<<" ";
}
}
cout<<endl;
}
}
}
}