NOI之查找最接近的元素(二分)

描述

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

输入

第一行包含一个整数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

解答:

这道题可以说是最简单的二分算法入门题了。二分算法中有两个必须要记住的函数一个是BinarySearch,一个是LowerBound(找到比P小的最大下标的元素),后者的应用性更广一些。

重点需要主要两个重要的点是!两个边界值!

这题我用了LowerBound解,利用这个函数得到一个比P小的最大下标的元素,由于数组是有序的,所以只需要和最大下标的元素前一个值比较,看哪个更接近P。

代码如下:

#include<iostream>
#include<cmath>
using namespace std;
int list[100001];
int lowerbound(int a[],int size, int p){
    int l=0;
    int r=size-1;
    int mid;
    
NOI普及组考试的难度适中。 首先,NOI普及组考试的题目设计会相对简单一些,以便初学者能够更好地理解和解答。相比于NOI提高组考试的更高难度,普及组考试更注重基础知识和算法的应用。这样不仅使得考生能够更容易掌握考试内容,也能够更好地巩固和拓展自己的计算机科学基础。 其次,考试题目会涵盖计算机科学的各个方面,包括据结构、算法、编程和理论等。这样可以让考生对计算机科学的不同领域都有所了解,并培养他们的综合能力和解决问题的能力。 此外,NOI普及组考试对编程语言的要求相对宽松。考生可以使用自己熟悉的编程语言进行解题。这样不仅给予考生更多选择的权利,也能更好地发挥他们的编程能力。 然而,虽然NOI普及组考试的难度相对较低,但仍然需要考生具备一定的计算机知识和编程基础。要取得好的成绩,考生需要对常用的据结构和算法有一定的了解和掌握,并且能够熟练地进行编程实现。同时,考生还需要培养自己的逻辑思维和问题解决能力,以便能够高效地解答问题。 综上所述,NOI普及组考试的难度适中,既考查了考生的计算机科学基础知识和编程能力,又给予了初学者足够的实践机会和提升空间。这样不仅为考生提供了学习和发展的平台,也能够激发他们对计算机科学的兴趣和热情。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值