nyoj904 search

来源:互联网 发布:北大青鸟云计算 编辑:程序博客网 时间:2024/04/28 19:36

search

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述
游戏积分的排行榜出来了,小z想看看得某个积分的人是谁。但是由于人数很多,他自己找很浪费时间,所以他想请你帮忙写一个程序,能快速的帮他找到他想要找的人
输入
多组测试数据,第一行有一个数T,表示有T组测试数据(T<=50)
第二行有两个数n和m(1<=n,m<=10000),n表示有n个人,m表示有m次查询
接下来n行,输入每个人的名字(长度小于10)和积分num(0<=num<=10^8),
接下来m行,每个数表示要查询的积分(每次查询一定有结果)
输出
输出对应积分的人的名字(如果有多个人的积分相同,则输出最前面的那个)
样例输入
15 3zhangsan 2qianxiao 5liuqiang 2wangwu 1lisi 3213
样例输出
zhangsanwangwulisi
来源
原创
上传者
ACM_马振阳
提醒:注意细节,这道题因为一个小问题,卡了好久。
#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>using namespace std;/*结构体*/ struct node{char name[15];int v;}game[10010];int cmp(node a,node b){return a.v<b.v;}/*二分查找*/int Binsearch(int l,int h,int k){int mid;while(l<=h){mid=(l+h)/2;if(k==game[mid].v)return mid;else if(k>game[mid].v)l=mid+1;else h=mid-1;} } int main(){int T,m,n,i,k,j;scanf("%d",&T);while(T--){cin>>n>>m;for(i=0;i<n;i++)scanf("%s %d",&game[i].name,&game[i].v);stable_sort(game,game+n,cmp);for(i=0;i<m;i++){scanf("%d",&j);k=Binsearch(0,n-1,j);while(k>0&&game[k-1].v==j)  //判定条件,,,,,没太在意细节就是卡在了这里                                     k-=1;printf("%s\n",game[k].name);}}return 0;} 

题中stable_sort(game,game+n,cmp);为稳定排序,需要调用cmp;具体介绍点击下面链接

 

http://blog.csdn.net/leolin_/article/details/6652406



 

0 0
原创粉丝点击