知识点:贪心
这个题差不多就是个黄题的难度,给个蓝题有点高了,就是一个区间贪心,需要建一下模,给定若干个区间,不同区间可以共用同一个点,问最少多少个点能使所有的区间都有点,贪心的策略就不说了,刘汝佳的书给的很明确了
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
bool cmp(pair<double, double> a, pair<double, double> b) {
if (a.second != b.second) return a.second < b.second;
return a.first > b.first;
}
int main() {
int L, d, n;
while (cin >> L >> d >> n) {
pair<double, double> a[N];
for (int i = 0; i < n; i++) {
double x, y;
cin >> x >> y;
double t = sqrt(d * d - y * y);
a[i] = make_pair(x - t, x + t);
}
sort(a, a + n, cmp);
int ans = 1;
double cur = a[0].second;
for (int i = 1; i < n; i++) {
if (a[i].first <= cur) continue;
cur = a[i].second;
ans++;
}
cout << ans << endl;
}
return 0;
}