1012.区间合并

 

1012.区间合并

Time Limit: 1000 MS    Memory Limit: 32768 KB
Total Submission(s): 959    Accepted Submission(s): 184

Description

给定n个开区间,合并他们中的重合者,输出合并后的区间数量。

Input

第一行:n(1 <= n <= 1000)
第2至第n+1行:每行两个整数(不会超过int),第i行的两个整数表示第i-1个区间的左边界和右边界。

Output

合并后所剩余的区间数量。

Sample Input

3
1 3
2 5
6 7

Sample Output

2



4
6 7
3 5
4 6
1 2
1.把区间按区间左端点升序排列
(1,2)
(3,5)
(4,6)
(6,7)
2.将区间第i个区间左端点与第i+1个的区间右端点比较
若< 则不是一个区间 并将answer+1
若> 则是一个区间 并将合并后的区间右端点更新
#include <bits/stdc++.h>
using namespace std;
struct qujian
{
    int zuo,you;
}a[1005];
bool cmp(qujian a1,qujian b1)
{
    return a1.zuo<b1.zuo;
}
int n,ans,i;
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d %d",&a[i].zuo,&a[i].you);
        }
        ans=1;
        sort(a,a+n,cmp);
        for(i=0;i<n-1;i++)
        {
            if(a[i].you>a[i+1].zuo)//是同一区间
            {
                a[i+1].you=max(a[i].you,a[i+1].you);//右端点复合
            }
            else
            {
                ans++;
            }
        }
        cout<<ans<<'\n';
    }
}

 

posted @ 2019-01-16 18:43  观稳769  阅读(264)  评论(0编辑  收藏  举报