“华为杯“华南理工大学程序设计竞赛(同步赛)题解A——二分的深入理解

这篇文章介绍了如何使用二分查找策略解决A-KNN算法中的问题,通过`lower_bound`和`upper_bound`函数确定元素在数组中的范围,以找到满足特定条件的最小mid值。主要应用于华南理工大学的‘华为杯’程序设计竞赛同步赛中。
摘要由CSDN通过智能技术生成

题目来源:A-KNN算法_"华为杯"华南理工大学程序设计竞赛(同步赛) (nowcoder.com)

解题算法:
        二分查找

        使用到函数返回对应元素迭代器的位置,找不到则返回尾迭代器

                           lower_bound() :寻找>=x的第一个元素的位置

                           upper_bound():寻找>x的第一个元素的位置

解题思想:

        每一次二分通过查找mid的值去确定在关于x加减mid的绝对值的范围内会在a数组中出现几个

最后二分返回的是最小的可以满足第几个靠近x的mid的值,正是因为出现了最小的mid的值才会恰好刚刚出现x距离靠近的哪一个,最后返回的就是daan

答案代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;

const int N = 1e6+10;

int n,q;
int a[N];

signed main()
{
	cin >> n >> q;
	for(int i=1;i<=n;i++){
		cin >> a[i];
	}
	sort(a+1,a+1+n);
	while(q--){
		int x,y;
		int ans=2e9;
		int l=0,r=2e9;
		cin >> x >> y;
		while(l<r){
			int mid=(l+r)/2;
			int ll=lower_bound(a+1,a+1+n,x-mid)-a;
			int rr=upper_bound(a+1,a+1+n,x+mid)-a;
			if(rr-ll>=y){
				r=mid;
				ans=mid;
			}
			else{
				l=mid+1;
			}
		}
		cout << ans <<endl;
	}
	return 0;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2021华为杯e题解题思路: 首先,我们需要理解题目的要求和背景。本题中,我们需要设计一个数学建模模型,来解决给定的问题。 接下来,我们要根据题目给出的信息和条件,确定问题的具体目标和约束条件。在本题中,我们需要设计一个模型来确定准确性的检测结果,并且需要考虑到多种因素对检测结果的影响。 然后,我们需要选择适当的数学模型来解决这个问题。在本题中,我们可以考虑使用概率统计的方法来分析准确性的检测结果。具体地,我们可以使用贝叶斯统计模型来分析在给定的条件下,准确性检测结果的概率分布。 接下来,我们需要根据模型的选择,收集和整理必要的数据。在本题中,我们需要收集关于准确性检测结果的数据,并将其整理成适当的数学表达形式。 然后,我们需要利用收集到的数据,对模型进行参数估计。在本题中,我们可以使用最大似然估计的方法来对模型的参数进行估计。 接下来,我们需要编写程序,并使用所选择的模型,进行计算和分析。在本题中,我们可以使用Python或者其他编程语言,来编写程序并进行模拟实验。 最后,我们需要根据模型的计算结果,给出合理的结论和建议。在本题中,我们可以根据模型的计算结果,来评估准确性检测结果的可靠性,并提出相应的改进建议。 总结起来,本题中我们通过选择合适的数学建模方法,收集和整理相关数据,进行模型参数估计和计算分析,最终得出准确性检测结果的评估和改进建议。通过这个过程,我们可以解决给定的数学建模问题。 ### 回答2: 【数学建模】2021华为杯e题解题思路(更新) 问题背景: 华为杯数学建模竞赛是一项重要的数学竞赛活动,旨在提高学生的数学建模能力和实践应用能力。2021华为杯e题是一道典型的数学建模问题,需要解决的是如何通过给定的数据,建立数学模型,解决实际问题。 解题思路: 1. 首先,仔细阅读题目,理解问题背景和要解决的关键问题。明确题目所给数据及其含义,确定问题的具体要求。 2. 其次,进行问题分析,确定所需建立的数学模型。根据题目要求,考虑使用适当的数学方法和模型,如线性规划、动态规划、贝叶斯网络等。 3. 然后,进行数据处理和特征提取。将题目所给的原始数据进行处理和整理,提取出对解题有用的特征和信息。 4. 接下来,建立数学模型。根据问题的具体要求,选择适当的数学模型,建立数学方程或模型来描述问题,并进行求解。 5. 最后,进行模型验证和结果分析。将求解得到的数学模型应用到实际问题中,验证模型的有效性,并进行结果的分析和解释,得出解决问题的结论。 这是一个简要的解题思路,具体的解题过程还需要根据实际题目情况做相应的调整和操作。在解题过程中,需要注意对数据的合理利用和数学模型的合理建立。通过合理的分析和求解,可以得到问题的解决方案,并提高数学建模的能力和实践应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值