数据结构与算法实验代码F. 奥运排行榜 时间限制 1
编辑: admin 2017-26-03
-
4
#include
int gold[225],medal[225],population[225];
int list[10];
int fir = 0;//用来判断是否是第一个元素用的
void printresult(int check_number,int n);
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i = 0;i < n;i++)
scanf("%d%d%d",&gold[i],&medal[i],&population[i]);
for(int i = 0;i < m;i++)
{
int check_number;
scanf("%d",&check_number);
printresult(check_number,n);
}
printf("\n");
return 0;
}
void printresult(int check_number,int n)
{
for(int i = 0;i < n;i++)
{
if(gold[i]>gold[check_number])
list[1]++;
}
int result = ++list[1];//这里还要多加一个1,因为数组原来是0
int num = 1;
for(int i = 0;i < n;i++)
{
if(medal[i]>medal[check_number])
list[2]++;
}
list[2]++;
double gold_per = gold[check_number]*1.0/population[check_number];
for(int i = 0;i < n;i++)
{
if((gold[i]*1.0/population[i])>gold_per)
list[3]++;
}
list[3]++;
double medal_per = medal[check_number]*1.0/population[check_number];
for(int i = 0;i < n;i++)
{
if(medal[i]*1.0/population[i]>medal_per)
list[4]++;
}
list[4]++;
for(int i = 1;i < 5;i++)
{
if(list[i] { result = list[i]; num = i; } } for(int i = 1;i < 5;i++) list[i] = 0;//对排名数组清零,因为之后要多次调用 if(!fir) { printf("%d:%d",result,num);//首个输入前面不用空格 fir = 1; } else printf(" %d:%d",result,num); } //如果超时的话还可以再优化,不过国家的数量比较少,应该不会 //优化就是把排名是1的话直接输出,不进行之后运算