Stable Groups
https://codeforces.com/contest/1539/problem/C
有 n 个学生,从 1 到 n 编号。第 i 个学生的水平是 ai。您需要将学生分成稳定的小组。一组学生被称为稳定的,如果在他们水平的排序数组中没有两个相邻元素的差异大于 x。
例如,如果 x=4,那么水平为 [1,10,8,4,4] 的组是稳定的(因为 4−1≤x, 4−4≤x, 8−4≤x, 10−8≤ x),而级别为 [2,10,10,7] 的组不稳定 (7−2=5>x)。
除了给定的 n 个学生外,教师最多可以邀请 k 个额外的任意级别的学生(由教师选择)。找出教师可以从所有学生(包括新邀请的学生)中组成的稳定小组的最少数量。
例如,如果有两个学生,分别是 1 级和 5 级; x=2;并且k≥1,那么你可以邀请一个3级的新学生,把所有的学生放在一个稳定的小组里。
输入
第一行包含三个整数 n, k, x (1≤n≤200000, 0≤k≤1018, 1≤x≤1018) - 初始学生人数,您可以额外邀请的学生人数,以及允许的最大人数水平差异。
第二行包含 n 个整数 a1,a2,…,an (1≤ai≤1018)——学生水平。
输出
在唯一的一行中打印一个整数:您可以将学生分成的最小稳定组数。
思路:
先排序后按原来的走一遍得到分的组数
再把距离排序
再依次填距离大于x的两个数
注意:
假如x=2
例如在2 7之间如果要补需要(7-2)/2就是两个
但是在2 8之间补4,6,也就是(8-2)/2-1个
浙公网安备 33010602011771号