幼儿园

幼儿园

题目描述:

幼儿园食品仓库中共有N包糖果,其中第k包糖果当中有Ak颗糖。虽然每包糖果的净含量一样,但是幼儿园的小朋友们并不懂得物理学上“质量”的概念,他们只知道糖果数量越多越好。而小朋友们会比较各自有多少糖果,糖果数量少的当然会不高兴:有 x 颗糖的小朋友看到另一个有 y 颗(y>x)糖果的小朋友时,“不高兴值”为 y-x.
Bob在幼儿园照顾孩子,今天Bob需要把糖果分给小朋友们。为了尽量让小朋友们别那么不高兴,Bob要从N包糖果中挑选M包糖果,每人一包,分给M名小朋友,并使“最不高兴”的小朋友的“不高兴值”尽可能小。请你帮Bob算一下,让最不高兴的小朋友的“不高兴值”的最小值是多少。

输入:

输入第一行一个整数N,表示糖果总共有N包;输入第2行一个整数M,表示幼儿园有M名小朋友。接下来有N行,每行一个整数Ak,分别表示每包糖果中的颗数。

  • 2 ≤ N ≤10 5
  • 2 ≤ M ≤ N
  • 0 ≤ Ak ≤ 10 9

输出:

输出1行,一个整数,表示最不高兴的小朋友的不高兴值。

样例:

样例1:
Input
7
3
10
100
300
200
1000
20
30
Output
20
Hint
Bob应选[10,20,30],这样最不高兴的小朋友有10颗糖,看到有30颗糖的小朋友,不高兴值为20
样例2:
Input
10
4
1
2
3
4
10
20
30
40
100
200
Output
3
Hint
选[1,2,3,4],最不高兴的小朋友的不高兴值为4-1=3
样例3:
Input
5
2
1
2
1
2
1
Output
0
Hint
选[1,1],或者[2,2],这两个小朋友都拿到一样数量的糖果,不高兴值为0

来源/分类:

malic-2021寒假热身赛02_C

思路/注意:

使用了#include<algorithm>头文件下的函数,我一开始只是简单想的排完序之后(使用sort()函数),用范围内的最大值减去最小值,但是不知道如何处理得到最小值,看到题解明白了,继续遍历数组a[n],求(范围最大值减去最小值的)最小值。可以使用min()函数。

代码(C++):

#include<iostream>
#include<algorithm>
using namespace std;
const int maxSize=100000;
int main(){
	int n,m;
	int minSet;
	int a[maxSize];
	cin>>n>>m;
	for(int i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	minSet=a[m-1]-a[0];
	for(int i=1;i<=n-m;i++){
		minSet=min(minSet,a[i+m-1]-a[i]);
	}
	cout<<minSet<<endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值