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

解题思路:先按照积分从小到大排序,然后二分查找要查找的积分,判断这个人的积分和他前面的那个人的积分是否相同。如果不同,输出这个人的名字;否则,说明这个人不是第一个获得这个积分的人,再接着二分,直到找到一个不同的,输出即可。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct score
{char name[11];int sco;
}a[10005];
bool comp(score a1,score a2)
{return a1.sco < a2.sco;
}
int Binary_search(int l, int r, int k)
{while(l < r){int mid = (l + r) / 2;if(a[mid].sco > k)r = mid;else if(a[mid].sco < k)l = mid+1;else{if(a[mid].sco == a[mid - 1].sco)r = mid;elsereturn mid;}}
}
int main()
{int t, n, m, i, k;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i = 0; i < n; i++)scanf("%s%d",a[i].name,&a[i].sco);stable_sort(a,a+n,comp);for(i = 0; i < m; i++){scanf("%d",&k);int p = Binary_search(0,n,k);printf("%s\n",a[p].name);}}return 0;
}

NYOJ 904 search 二分查找相关推荐

  1. 算法导论第2章(3) 二分查找 binary search

    二分查找(分治法). 二分查找也是一种分治法的实现,每一次查找将数据分为两个部分,问题规模都减小一半.这样查找的时间复杂度为logN.因为其实查找过程建立了一棵有N个节点的二叉树,查找次数是这棵树的高 ...

  2. Java数据结构与算法——线性查找 二分查找 插值查找

    1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...

  3. 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)

    议题:二分查找树性能分析(Binary Search Tree Performance Analysis) 分析: 二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任 ...

  4. leetcode 二分查找 Search in Rotated Sorted ArrayII

    Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ...

  5. 二分查找树性能分析(Binary Search Tree Performance Analysis)

    经典算法系(21)-二分查找树性能分析(Binary Search Tree Performance Analysis)https://www.douban.com/note/221942390/   ...

  6. SAP ABAP二分查找(binary search)实际问题的深度分析

    在维护公司SAP的过程中,遇到一个问题,困扰了很久! 简单描述一下问题:(为了不牵扯公司业务,这是抽取问题)将主要的三个字段 存在一个内表TAB2,如图所示: 需要强调一下,真是的内表比TAB2要多很 ...

  7. ABAP性能优化之使用二分查找(Binary Search)选项

    READ命令使用顺序查找数据表,这会降低处理速度.取而代之,使用binary search的附加命令,可以使用二分查找算法,可以帮助加快内表查找速度. 在使用binary search之前 必须首先将 ...

  8. SAPABAP性能优化技巧—使用二分查找(Binary Search)选项

    READ命令使用顺序查找数据表,这会降低处理速度.取而代之,使用binary search的附加命令,可以使用二分查找算法,可以帮助加快内表查找速度. 在使用binary search之前必须首先将内 ...

  9. 八、二分查找(Binary Search)

    一.概述 二分查找(Binary Search,也称折半查找)--针对有序数据集合的查找算法 1.基本思想 类似分治思想,每次都通过跟区间的中间元素进行对比,将代查找的区间缩小为之前的一半,直到找到要 ...

最新文章

  1. gis怎么通过水库划分子流域_到底是谁在革GIS的命?
  2. Java双向链表快速排序_双向链表的插入,删除,以及链表的快速排序
  3. 【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件
  4. boost::lambda模块实现boost::function 进行测试
  5. “速课小龙”项目冲刺3
  6. 力扣-543. 二叉树的直径
  7. Python迭代器(Iterator)
  8. 如何删除U盘中的System Volume Information文件夹?
  9. 计算机无法识别出硬件,电脑检测不到硬盘,电脑硬件故障检测工具
  10. Python爬取豆瓣电影短评
  11. webview卡顿_分享三个小技巧,微信卡顿的人千万不要错过哦
  12. C语言 unsigned signed void 关键字和 类型修饰符
  13. Android各种img文件作用以及系统启动过程
  14. python金字塔函数_Pyramid Python量化学习笔记:API的基本方法,金字塔
  15. 单不单身一样可以过情人节
  16. 库卡示教器卡死“正在读取驱动器”
  17. python中的complex是什么意思_Python 内置函数complex详解,pythoncomplex
  18. Tectonic 1.7升级了容器编排平台,提供了新的监控功能并支持微软Azure
  19. 1亿美元营收以上127家,最新PCB百强企业名单出炉
  20. 什么是上网行为管理?

热门文章

  1. 重学ES6 模板字符串
  2. websocket学习和群聊实现
  3. jspServlet(2)
  4. UImageview加边框 加阴影
  5. PHP读取远程文件并保存
  6. the worries in life: basically two things
  7. what you should do in the morning?
  8. 新手可以做的ai比赛:亲测有效
  9. 三月苏州健康小贴士!!!健康生活从我做起
  10. C++学习札记(2011-09-30)