• Openjudge1.11.1 查找最接近的元素


    【描述】
        在一个非降序列中,查找与给定值最接近的元素。

    【输入】
        第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。
        第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
        第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
        接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。

    【输出】
        m行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。

    【样例输入】
        3
        2 5 8
        2
        10
        5

    【样例输出】
        8
        5

    【题目分析】
    板子题。

    【代码实现】

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 long a[100001];
     5 long m;
     6 long k;
     7 void binarysearch(long long w)
     8 {
     9     int left=1;
    10     int right=n,mid;
    11     while(right>left+1)
    12     {
    13         mid=left+(right-left)/2;//第一遍写成left-right了 
    14         if(a[mid]<w)
    15         {
    16             left=mid;
    17         }else 
    18         {
    19             right=mid; 
    20         }
    21     }
    22     if(abs(a[left]-w)<=abs(a[left+1]-w)){
    23         cout<<a[left]<<endl;
    24     }else{
    25         cout<<a[left+1]<<endl;
    26     }
    27 }
    28 int main()
    29 {
    30     long m;
    31     long k;
    32     scanf("%d",&n);
    33     for(int i=1;i<=n;i++)
    34     {
    35         scanf("%d",&a[i]);
    36     }
    37     scanf("%d",&m);
    38     for(int i=1;i<=m;i++)
    39     {
    40         scanf("%d",&k);
    41         if(n==1){
    42             printf("%d
    ",a[1]);//这里记得换行,不然会Presentation Error
    43         }else{
    44             binarysearch(k);
    45         }
    46         
    47     }
    48 
    49     return 0;
    50 }
  • 相关阅读:
    【BZOJ】1006: [HNOI2008]神奇的国度 弦图消除完美序列问题
    【BZOJ】1015: [JSOI2008]星球大战starwar
    poj 2001 Shortest Prefixes trie入门
    hdu 1251 统计难题 trie入门
    hdu 4570 Multi-bit Trie 区间DP入门
    Lucas定理的理解与应用
    hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)
    组合数模板
    如何使用弹窗来让用户订阅电子杂志
    分享一则电子邮件营销案例
  • 原文地址:https://www.cnblogs.com/TheZealous/p/14529616.html
Copyright © 2020-2023  润新知