A. Points on the line - Codeforces Round 466 (Div. 2)
Solutions Codeforces 双指针 1200 Easy
Lastmod: 2025-01-04 周六 11:58:27

https://codeforces.com/contest/940/problem/A

题目大意

给定 $n \ (\le 100)$ 个点 $x_i \ (1 \le x_i \le 100)$ 和一个 $c \ (0 \le c\le 100)$。问至少删掉多少点使得剩余的任意 $i, j$ 满足 $|x_i - x_j| \le c$。

简要题解

范围很小所以可以直接 $n ^ 3$ 或者 $n^2$ 枚举。

当然,如果 $n \le 2 \times 10^5$,$x_i, c \le 10^9$ 也是可做的,同样双指针滑动即可。

复杂度

$T$:$O(n + \max(x_i))$

$S$:$O(n + \max(x_i))$

代码实现

#include <bits/stdc++.h>
using namespace std;

int io_=[](){ ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }();

using LL = long long;
using ULL = unsigned long long;
using LD = long double;
using PII = pair<int, int>;
using VI = vector<int>;
using MII = map<int, int>;

template<typename T> void cmin(T &x,const T &y) { if(y<x) x=y; }
template<typename T> void cmax(T &x,const T &y) { if(x<y) x=y; }
template<typename T> bool ckmin(T &x,const T &y) { 
    return y<x ? (x=y, true) : false; }
template<typename T> bool ckmax(T &x,const T &y) { 
    return x<y ? (x=y, true) : false; }
template<typename T> void cmin(T &x,T &y,const T &z) {// x<=y<=z 
    if(z<x) { y=x; x=z; } else if(z<y) y=z; }
template<typename T> void cmax(T &x,T &y,const T &z) {// x>=y>=z
    if(x<z) { y=x; x=z; } else if(y<z) y=z; }

// mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
// mt19937_64 rnd_64(chrono::system_clock::now().time_since_epoch().count());

/*
---------1---------2---------3---------4---------5---------6---------7---------
1234567890123456789012345678901234567890123456789012345678901234567890123456789
*/

const int M = 100;

void solve() {
  int n, d; cin >> n >> d;
  vector<int> cnt(M + 1);
  int xi;
  for (int i = 0; i < n; i++) {
    cin >> xi;
    cnt[xi]++;
  }
  int ans = 0;
  int cur = 0;
  for (int i = 1; i <= M; i++) {
    cur += cnt[i];
    cmax(ans, cur);
    if (i >= d) {
      cur -= cnt[i - d];
    }
  }

  cout << (n - ans) << '\n';
}

int main() {
  int t = 1; 
  // cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}
Prev: B. Our Tanya is Crying Out Loud - Codeforces Round 466 (Div. 2)
Next: A. Simple Palindrome - Codeforces Round 972 (Div. 2)