二分法查找

来源:互联网 发布:淘宝联盟客服在哪里找 编辑:程序博客网 时间: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
原创粉丝点击