题目:
解题思路:
abs(xi-xj) >= wi+wj
我们把abs去掉,得
xi-xj >= wi+wj
将xj移到右边,wi移到左边,得
xi-wi >= xj+wj
然后我们用l[i]记录xi-wi,r[i]记录xi+wi,然后排序使得xi-xj >= 0(也就是原式中的abs),最后枚举统计就OK了
话说这怎么也是一道黑题
Accepted code:
#include<cstdio>
#include<algorithm>
int x, w, N;
int id[200005], l[200005], r[200005];
int cmp(int x, int y) {
if (r[x] == r[y]) return l[x] < l[y];
else return r[x] < r[y];
}
int main() {
scanf("%d", &N);
for (register int i = 1; i <= N; ++i)
scanf("%d %d", &x, &w), id[i] = i,
l[i] = x - w, r[i] = x + w;
std::sort(id+1, id+N+1, cmp);
int ls = -1e9 - 1e8, ans = 0;
for (register int i = 1; i <= N; ++i)
if (l[id[i]] >= ls) ++ans, ls = r[id[i]];
return printf("%d", ans) & 0;
}