Font Size: Aa Aa Aa
奶牛场有许多奶牛,农夫Alice,每天都会为奶牛挤奶,但是这些奶牛的产奶量是不相同,每头奶牛都有唯一的编号,现在农夫Alice想找到它们之中产奶量为中位数的奶牛的编号,如果产奶量一样,输出编号较小的奶牛的编号 .
第一行T表示测试组数
第二行m表示奶牛头数,这里保证m是奇数,m<=1500
接下来m行每行两个整数id, milk 表示奶牛的id和产奶量(保证每个id不相同,且产奶量<=10000)
输出产奶量为所有奶牛中中间值的奶牛的编号.如果产奶量一样,输出编号较小的奶牛的编号,每组测试数据间输出一个空行.
3
3
1 2
2 2
3 2
3
1 2
2 3
3 4
5
1 1
2 1
3 1
4 2
5 2
1
2
1
这里的中位数,是指所有奶牛中,产量恰好在排在中间的奶牛的产量。
参考代码如下:
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node
{
int id,cl;
}cow[2005];
int cmp(node a,node b)
{
if(a.cl==b.cl)
return a.id<b.id;
else
return a.cl>b.cl;
}
int main()
{
int t,n,i,sum,m;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d %d",&cow[i].id,&cow[i].cl);
sort(cow,cow+n,cmp);
m=cow[n/2].cl;
sum=cow[n/2].id;
for(i=0;i<n/2;i++)
{
if(cow[i].cl==m)
{
sum=cow[i].id;
break;
}
}
printf("%d\n",sum);
printf("\n");
}
return 0;
}
更多做题心得的详情请查看(记得关注哦)https://mp.weixin.qq.com/s?__biz=MzIyOTM4MDMxNw==&mid=2247483798&idx=1&sn=d4fbd34e50ce4efda39d7710d2dc5dc9&chksm=e842d824df3551320d7f1ed85286b2616aec419f7a852cc5c9c9f270beb237b5e6ca83166162&token=1630951018&lang=zh_CN#rd