二分法查找
来源:互联网 发布:淘宝联盟客服在哪里找 编辑:程序博客网 时间:2024/05/16 17:20
没想到找的这是这个题凑活看吧
二分练习
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给你一个序列,然后给你m个元素,让你从序列中找出与每个元素最接近的数字输出来,如果有两个就输出两个。
输入
多组输入,第一行给你两个数n(0 < n < 10000000),m(0 < m < n),接下来是数列的n个数,然后再输入m个元素,让你找出最接近每个元素的值。如果有两个,按从小到大输出。
输出
这m个数分别输出最接近每个元素的值,组与组之间输出一个空行。
示例输入
8 41 2 3 4 5 6 8 114927
示例输出
4826 8
#include <iostream>#include <stdio.h>using namespace std;#include <algorithm>//我竟然用了stl太违背道德了int main(){ int n,m,z,low,high,mid; int i,a[110000]; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0; i<n; i++) { scanf("%d",&a[i]); } sort(a,a+n); while(m--) { scanf("%d",&z); low=0; high=n-1; while(low<=high) { mid=(low+high)/2; if(a[mid]==z) { break; } else if(a[mid]<z) low=mid+1; else high=mid-1; } if(z<a[0]) printf("%d\n",a[0]); else if(z>a[n-1]) printf("%d\n",a[n-1]); else { if(z==a[mid]) printf("%d\n",a[mid]); else if(a[mid]>z) { if((z-a[mid-1])==(a[mid]-z)) printf("%d %d\n",a[mid-1],a[mid]); else if((z-a[mid-1])<(a[mid]-z)) printf("%d\n",a[mid-1]); else if((z-a[mid-1])>(a[mid]-z)) printf("%d\n",a[mid]); } else if(a[mid]<z) { if((z-a[mid])==(a[mid+1]-z)) printf("%d %d\n",a[mid],a[mid+1]); else if((z-a[mid])<(a[mid+1]-z)) printf("%d\n",a[mid]); else if((z-a[mid])>(a[mid+1]-z)) printf("%d\n",a[mid+1]); } } } printf("\n"); } return 0;}
0 0
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- windows下通过VNC客户端软件远程连接Ubuntu14.04的桌面共享服务vino
- java连接memcached,并对比从数据库中查询数据与从memcached查询的性能
- 04 Menu 菜单
- JS计算时间差
- 使用ImageAlpha批量减小png文件的体积的方法
- 二分法查找
- ios读取plist文件
- std::unique
- hdu 1455(Sticks 经典深搜)
- CreateParameter参数说明
- 苹果自带API:Foundation——NSURLConnection
- linux
- IIS 部署网站注意事项
- Excel关于日期计算的公式技巧