0
已解决
2777 区间合并 经验值:1200
题目描述 Description
区间是指具有左端点和右段点的,在左端点和右端点间所有数的集合。例如(2, 6)就是指2到6之间的所有数。现在给你n个区间,请你将它们合并成尽可能少的区间。区间合并的规则是,如果两个区间有公共部分,或者端点相连,则可以变成一个更大的区间。
输入描述 Input Description
第一行,一个整数,n,表示有n个区间
接下来n行,每行两个整数,a b,表示区间(a, b)
输出描述 Output Description
一个整数,表示合并之后还剩多少个区间
样例输入 Sample Input
4 1 5 2 4 1 4 2 3
样例输出 Sample Output
1
数据范围及提示 Data Size & Hint
n≤100
//CODE
//#pragma GCC optimize(3)
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct qj {
int l, r;
}a[1005], tmp;
int n, ans = 1;
bool cmp (qj x, qj y) {
return x.l < y.l;
}
int main() {
// freopen ("题目名.in", "r", stdin);
// freopen ("题目名.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i ++) {
int x, len;
cin >> x >>len;
a[i].l = x - len;
a[i].r = x + len;
}
sort (a + 1, a + n + 1, cmp);
tmp = a[1];
for (int i = 2; i <= n; i ++) {
if (a[i].l <= tmp.r) {
tmp.l = a[i].l;
tmp.r = min (tmp.r, a[i].r);
}
else {
ans ++;
tmp = a[i];
}
}
cout << ans;
// fclose (stdin);
// fclose (stdout);
return 0;//好习惯!
}
WA 70分,求大佬找错!
