本文主要是介绍hdu 5038 Grade,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
hdu 5038 Grade
给定一个计算公示 以及W的值 计算会出现多少种结果 主要是 输入n=1的时候 直接输出结果而不是BAD
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 1000100
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FOV(i,a,b) for(int i=a;i>=b;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define REV(i,a,b) for(int i=a-1;i>=b;i--)
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
using namespace std;
int a[MAXN];
int mode[10010];
struct node
{
int num;
int time;
bool operator<(const node p)const
{
if(time==p.time) return num<p.num;
return time>p.time;
}
};
node no[10010];
//bool cmp(int a,int b)
//{
// return a>b;
//}
int main()
{
//freopen("ceshi.txt","r",stdin);
int tc;
scanf("%d",&tc);
int cs=1;
while(tc--)
{
int n;
scanf("%d",&n);
if(n==1)
{
int x;
scanf("%d",&x);
printf("Case #%d:\n",cs++);
int s=10000-(100-x)*(100-x);
printf("%d\n",s);
continue;
}
MEM(mode,0);
for(int i=0;i<10010;i++)
no[i].time=0;
int cnt=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
int s=10000-(100-a[i])*(100-a[i]);
if(mode[s]==0) cnt++;
mode[s]++;
no[s].num=s;
no[s].time=mode[s];
// cout<<"zhi "<<s<<" cishu "<<no[s].time<<endl;
}
sort(no,no+10005);
// for(int i=0;i<cnt;i++)
// cout<<no[i].time<<" ";
// cout<<endl;
int k;
printf("Case #%d:\n",cs++);
for(k=1;k<cnt;k++)
{
if(no[k].time!=no[k-1].time)
break;
}
// cout<<"kkk "<<k<<endl;
if(k==cnt&&(cnt>1))
{
printf("Bad Mushroom\n");
}
else
{
printf("%d",no[0].num);
for(int j=1;j<k;j++)
printf(" %d",no[j].num);
puts("");
}
}
return 0;
}
这篇关于hdu 5038 Grade的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!