search
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
- 游戏积分的排行榜出来了,小 z 想看看得某个积分的人是谁。但是由于人数很多,他自己找很浪费时间,所以他想请你帮忙写一个程序,能快速的帮他找到他想要找的人
#include<stdio.h>
#include<iostream>#include<algorithm>
struct score
{
char name[15];
int b;
}stu[10010];
bool cmp(score a1,score a2)//一定得将 结构体中的数据引出
{
return a1.b<a2.b;
}
int bin_search(score s[],int a,int n)//二分查找
{
int l,r,mid;
l=0;r=n-1;
while(l<=r)
{
mid=(l+r)/2;
if(s[mid].b==a)
return mid;
if(s[mid].b>a)//中值大于所找值
r=mid-1;
else中值小于所找值
l=mid+1;
}
return -1;
}
int main()
{
int t,n,m;scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)//输入结构体数据
scanf("%s%d",stu[i].name,&stu[i].b);
std::stable_sort(stu,stu+n,cmp);//快速排序,必须得引用cmp
while(m--)
{
int a;
scanf("%d",&a);
int k=bin_search(stu,a,n);
while(k-1>=0&&stu[k-1].b==a)//如果有多个人的积分相同,则输出最前面的那个
k--;
printf("%s\n",stu[k].name);
}
}
return 0;
}