问题标题: 酷町堂:2777 区间合并

0
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分,求大佬找错!


0
已采纳
蔡乐毅
蔡乐毅
高级光能
高级光能

30行不是min是max

还有你的输入咋搞的?错了吧?

我要回答