SDUTOJ 2781 二分练习——二分搜索
来源:互联网 发布:广州数控g71编程实例 编辑:程序博客网 时间:2024/09/21 06:35
题目描述
给你一个序列,然后给你m个元素,让你从序列中找出与每个元素最接近的数字输出来,如果有两个就输出两个。
输入
多组输入,第一行给你两个数n(0 < n < 10000000),m(0 < m < n),接下来是数列的n个数,然后再输入m个元素,让你找出最接近每个元素的值。如果有两个,按从小到大输出。
输出
这m个数分别输出最接近每个元素的值,组与组之间输出一个空行。
示例输入
8 41 2 3 4 5 6 8 114927
示例输出
4826 8
<span style="font-size:24px;">#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>using namespace std;int s[10000010];int main(){ int n=0,k=0,l=0,mid,i=0,flag=0,head=0,tail=0; while(scanf("%d%d",&n,&k)!=EOF) { for(i=0; i<n; i++) { scanf("%d",&s[i]); } sort(s,s+n); for(i=0; i<k; i++) { flag=0; scanf("%d",&l); head=0; tail=n-1; while(head<=tail) //二分搜索 { mid=head+(tail-head)/2; if(s[mid]==l) { printf("%d\n",l); flag=1; break; } if(l<s[mid]) { tail=mid-1; } if(l>s[mid]) { head=mid+1; } } if(flag==0&&l<s[n-1]&&l>s[0])//下面是我一开始被掉进去的坑 { if((l-s[tail])==(s[head]-l)) { printf("%d %d\n",s[tail],s[head]); continue; } else { if((l-s[tail])<(s[head]-l)) { printf("%d\n",s[tail]); } else { printf("%d\n",s[head]); } } } if(flag==0&&l>s[n-1]) { printf("%d\n",s[n-1]); } if(flag==0&&l<s[0]) { printf("%d\n",s[0]); } } printf("\n"); } return 0;}</span>
0 0
- SDUTOJ 2781 二分练习——二分搜索
- 【2781】二分练习 sdutOJ
- 算法——二分搜索
- 搜索—二分三分搜索—1004
- SDUT 2781 二分练习
- 算法练习--二分搜索哈希表-JS 实现
- hiho练习“Drinking Game"二分搜索
- 2016春季练习——二分+贪心
- 2016夏季练习——二分
- 2016夏季练习——二分
- 2016夏季练习——二分
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 二分练习
- 第一次写博客,怎么办,好紧张,怎么样才能显得我经常写的样子。
- 各大电商的缓存策略
- 最近。。
- 大数减法
- java中equals方法和“==”的比较
- SDUTOJ 2781 二分练习——二分搜索
- 递推总结
- windows游戏编程<五>X86 (内存)寄存器相关的基本概念
- hdu 3665:Seaside
- ADO.NET(用窗体实现crud)
- 基础学习-流水账
- .Net之路(十二)Cookie对象
- 【NOI2011】道路修建
- python IDLE 改变窗口背景颜色