南邮 OJ 1407 线段覆盖

线段覆盖

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 219            测试通过 : 60 

比赛描述

给出数轴上N条线段,每条线段用两个数表示A,B(-10^9<=A<B<=10^9),表示从a到b的一条线段。

现在请你求出它们覆盖数轴上的多长距离。



输入

第一行:N

以后N行,每行给出一条线段,即两个用空格隔开的整数:Ai和Bi

输出

个数,表示覆盖长度

样例输入

3
2 8
-1 1
5 10

样例输出

10

提示

 

题目来源

JSOI2010




#include<iostream>
#include<algorithm>
using namespace std;

struct point{
	int x;
	bool isLeft;
};
bool operator<(const point p1,const point p2){
	return p1.x<p2.x;
}
int main(){
	int N,i,count=0,begin,sum=0;
	bool findBegin = 0;
	point *points;
	cin>>N;
	N *= 2;
	points = new point[N];
	for(i=0;i<N;++i){
		cin>>points[i].x;
		points[i].isLeft = 1;
		++i;
		cin>>points[i].x;
		points[i].isLeft = 0;
	}
	sort(points,points+N);
	for(i=0;i<N;++i){
		if(!findBegin){
			findBegin = 1;
			begin = points[i].x;
		}
		if(points[i].isLeft){
			++count;
		}else{
			--count;
		}
		if(0==count){
			sum += points[i].x-begin;
			findBegin = 0;
		}
	}
	cout<<sum<<endl;
}





你可能感兴趣的:(ACM,线段覆盖,南邮OJ)