We've got no test cases. A big olympiad is coming up. But the problemsetters' number one priority should be adding another problem to the round.
The diameter of a multiset of points on the line is the largest distance between two points from this set. For example, the diameter of the multiset {1, 3, 2, 1} is 2.
Diameter of multiset consisting of one point is 0.
You are given n points on the line. What is the minimum number of points you have to remove, so that the diameter of the multiset of the remaining points will not exceed d?
The first line contains two integers n and d (1 ≤ n ≤ 100, 0 ≤ d ≤ 100) — the amount of points and the maximum allowed diameter respectively.
The second line contains n space separated integers (1 ≤ xi ≤ 100) — the coordinates of the points.
Output a single integer — the minimum number of points you have to remove.
3 1 2 1 4
1
3 0 7 7 7
0
6 3 1 3 4 6 9 10
3
题意:给你n个数,和一个k,这n个数的最大差值不能超过k,问你最少需要删除几个数满足要求。
思路:逆向思维,只需找符合要求的最大长度,用n减去这个最大长度就是需要删除的个数。由于一定是连续的,所以n^2枚举。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[105],n,d,mx=-1;
cin>>n>>d;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
if(a[j]-a[i]<=d)
{
mx=max(mx,j-i+1);
}
}
}
cout<<n-mx<<endl;
return 0;
}
探讨了如何通过删除部分点使剩余点集的最大距离差不超过指定值的问题,并提供了一个有效的算法实现。
314

被折叠的 条评论
为什么被折叠?



