1012.区间合并
1012.区间合并
Description
给定n个开区间,合并他们中的重合者,输出合并后的区间数量。
Input
第一行:n(1 <= n <= 1000)
第2至第n+1行:每行两个整数(不会超过int),第i行的两个整数表示第i-1个区间的左边界和右边界。
第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'; } }