首页 > 其他分享 >P9064 [yLOI2023] 苦竹林 题解

P9064 [yLOI2023] 苦竹林 题解

时间:2023-02-20 19:33:36浏览次数:49  
标签:varepsilon 题解 yLOI2023 最小 个数 leq 最小值 P9064 ans

题目传送门

题目大意

给定一个长度为 \(n\) 序列 \(a\),从中选取 \(m\) 个,满足对任意的 \(1 \leq i, j \leq m\),都有 \(|b_i - b_j| \leq \varepsilon\),其中,\(b\) 是选出来的 \(m\) 个数。

求最小的 \(\varepsilon\)。

解题思路

满足 \(|b_i - b_j| \leq \varepsilon\) 其实就是满足从 \(b\) 中任意选取两个数,这两个数的差不能大于 \(\varepsilon\),也就是说,\(\varepsilon\) 要大于或等于这两个数的差的最大值;题目中说要求 \(\varepsilon\) 为最小值,也就是从 \(b\) 中,找出最大的数和最小的数,它们的差其实就是 \(\varepsilon\)。

首先可以排个序,保证 \(a\) 单调不降,因为 \(a\) 有可能不是单调不降的序列;这样也使 \(m\) 个数是连续的。

为了使 \(\varepsilon\) 最小,就要使 \(b\) 中最大值与最小值最接近,要使 \(b\) 中最大值与最小值最接近,其实就是找排序后 \(a\) 中相下标相距 \(m\) 的两个数的差值最小,他们的差就是 \(\varepsilon\)。

要找排序后 \(a\) 中差值最小并且下标相距 \(m\) 的两个数,可以从 \(1\) 枚举到 \(n-m+1\)(因为要枚举 \(m\) 个数中的最小值,通过最小值找出最大值,所以 \(n-m+1\) 再往后的就不用重复枚举了),每次找 \(m\) 个数中最小的;用 \(a_{i+m-1}-a_i\)(\(a_{i+m-1}\) 与 \(a_i\) 的下标相距 \(m\)),求的是当 \(a_i\) 为 \(m\) 个数中最小的数的时候,\(m\) 个数中最大的数减 \(a_i\) 的差是多少;要取最小的差,所以要取每次 \(a_{i+m-1}-a_i\) 要与之前的最小差取最小值,即:

ans=min(ans,a[i+m-1]-a[i]);

注意要给 \(ans\) 赋一个极大值,不然答案会永远为 \(0\)。

代码

AC 记录

#include <bits/stdc++.h>
#define ri register int
using namespace std;
int n,m,a[100005],ans=INT_MAX;    //赋极大值
int main(){
	scanf("%d%d",&n,&m);
	for(ri i=1;i<=n;i++) 
		scanf("%d",&a[i]);
	sort(a+1,a+1+n);    //排序
	for(ri i=1;i<=n-m+1;i++) 
		ans=min(ans,a[i+m-1]-a[i]);   //求排序后 a 中差值最小并且下标相距 m 的两个数的差的最小值
	printf("%d",ans);
	return 0;
}

标签:varepsilon,题解,yLOI2023,最小,个数,leq,最小值,P9064,ans
From: https://www.cnblogs.com/zzyblog0619/p/17138624.html

相关文章

  • 「题解」洛谷 P5829 【模板】失配树
    crashednb/se不过它解释为什么跳\(k\bmodd+d\)确实有点迷,不懂为什么直接跳\(k\bmodd\)会挂可以手摸一下峰峰峰的hack,从25开始跳。简单做法就是建出失配树然后......
  • 问题解决系列:证书续签的时候,nginx重启报错
    一、问题场景进行​​let'sencrypt​​​证书续签之后,​​nginx​​重启报错,提示如下:[MonFeb2010:23:40CST2023]Runreloadcmd:/bin/systemctlrestartnginxJobf......
  • abc290F 题解
    吸收恒等式、范德蒙德卷积。为什么我能切黄题的场我都没打啊/ll先考虑确定度数数组时怎么做。显然\(\sumx_i=2n-2\)。手玩一下发现答案是\(\sum[x_i>1]+1\)......
  • 【题解】P5644 [PKUWC2018]猎人杀
    供题人是树剖姐姐喵/se思路生成函数+子集反演+分治NTT.首先发现当前打中的猎人倒下之后,后面的猎人被射中的概率会随之变化,也就是说操作是有后效性的,不好处理。有......
  • LuoguP5354 [Ynoi2017]由乃的OJ题解
    P5354[Ynoi2017]由乃的OJPreface自己的由乃题一血,写篇题解纪念一下。Description给定一颗\(n\)个结点的树,每个结点都有一个权值\(a_i\)和一个位运算符\(\mathrm{......
  • Android 关于Dialog在全屏弹出会显示状态栏和导航栏的问题解决
    项目的奇葩需求,需要弹出Dialog不要显示状态栏和导航栏,记录一下解决方法原文地址:Android关于Dialog在全屏弹出会显示状态栏和导航栏的问题解决Stars-one的杂货小窝说明......
  • 【题解】ABC290F Maximum Diameter
    大龄选手只杀到E,鉴定为寄。思路正解是高明数数,这里提供一种强行推导的方法。首先有一个死掉的思路:原问题等价于求所有\(n\)个点的有标号无根树的直径之和。如果有什......
  • LeetCode-45. 跳跃游戏II - 题解分析
    题目来源45.跳跃游戏II题目详情给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果......
  • CF1734E Rectangular Congruence 题解
    可能更好的阅读体验题目传送门toluogu为什么只有VP才会遇到这种简单E。题目大意给定一个质数\(n\)和长度为\(n\)的序列\(b\),要求构造一个\(n\timesn\)矩......
  • VNCTF 2023-Web&Misc 部分题解
    WebBabyGo各个路由:r.GET("/",func(c*gin.Context){userDir:="/tmp/"+cryptor.Md5String(c.ClientIP()+"VNCTF2023GoGoGo~")+"/"ses......