search
2015-08-07 11:35
447 查看
NYOJ 904 search 二分查找
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行,每个数表示要查询的积分(每次查询一定有结果)
输出输出对应积分的人的名字(如果有多个人的积分相同,则输出最前面的那个)
样例输入
1 5 3 zhangsan 2 qianxiao 5 liuqiang 2 wangwu 1 lisi 3 2 1 3
样例输出
zhangsan wangwu lisi
参考网址:/article/2442773.html
另外:table_sort的用法与sort一致,区别是stable_sort函数遇到两个数相等时,不对其交换顺序#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct person { char name[20]; int num; }; person a[10005]; int cmp(person a,person b) { return a.num<b.num; } int dy(int l,int r,int c) { int mid; while(l<r) { mid=(l+r)/2; if(c>a[mid].num) l=mid+1; else if(c<a[mid].num) { r=mid; } else { if(a[mid].num==a[mid-1].num) { r=mid; } else return mid; } } } int main() { int T,m,n,i,j,x; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(i=0;i<n;i++) { scanf("%s%d",&a[i].name,&a[i].num); // cin>>a[i].name>>a[i].num; } stable_sort(a,a+n,cmp); for(i=0;i<m;i++) { scanf("%d",&x); int p=dy(0,n,x); printf("%s\n",a[p].name); // cout<<a[p].name<<endl; } } return 0; }
相关文章推荐
- windows下判断该设备是否支持触摸屏
- Linux文件夹/文件基本操作
- Android enum的使用
- STL之priority_queue
- Spring 4.2 感知接口
- Android编译系统参考手册
- iOS开发Xcode中git使用(部分)
- spring security 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架
- wifi扩展设置
- django开发bug记录
- Swift和Objective-C混合编程——OC调用Swift
- Injection Plugin for Xcode
- android 广播 实例
- http://blog.csdn.net/luobin369/article/details/8537897
- 43. Element hasAttributes() 方法
- SQL语句(比较杂乱 没有经过整理)--不间断更新中、、、、、
- 终端同一行输出进度信息
- (leetcode)Contains Duplicate II
- hdoj 5024 枚举+dfs
- 14年百度深度学习校招题目