二分查找
来源:互联网 发布:ubuntu 杀死进程 编辑:程序博客网 时间:2024/05/29 13:59
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
解题思路:先按照积分从小到大排序,然后二分查找要查找的积分,判断这个人的积分和他前面的那个人的积分是否相同。如果不同,输出这个人的名字;否则,说明这个人不是第一个获得这个积分的人,再接着二分,直到找到一个不同的,输出即可。
- #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;
- else
- return 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;
- }
- //顺便附上二分查找的方法
- #include<stdio.h>
#include<algorithm>
using namespace std;
int a[100];
int binary(int l,int r,int k)
{
while(l<r)
{
int mid=(l+r)/2;
if(k>a[mid])
l=mid+1;
if(k<a[mid])
r=mid;
else
{
if(a[mid]==a[mid-1])
r=mid;
else
return mid;
}
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int k;
scanf("%d",&k);
int p=binary(0,n,k);
printf("a[%d]=%d\n",p,a[p]);
return 0;
}
0 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- libevent带负载均衡的多线程使用示例
- 安卓下拉刷新开源库对比
- 原生javascript操作DOM元素
- 【数据结构 笔记01】链表常见操作
- finereport报表用java批量化打印
- 二分查找
- Retrofit的Get与Post请求
- 基于libevent的多线程通信框架实现
- 文件各格式转化成Base64字符串b
- MagicIndicator
- Android 自定义View——拖动选择时间控件
- ios developer tiny share-20160808
- [iOS 相机相册调用] UIImagePickerController 简单实用 [转]
- Android数据库的Demo演示