分别对起点和终点进行排序,循环加上每一条线段的长度,若与前一条线段重复减去重复部分
#include
#include
#include
using namespace std;
int main()
{
int n;
cin>>n;
long long a[20001],b[20001],l=0;//a数组存储起点,b数组存储终点,l表示最终长度
for(int i=0;i<n;i++)
cin>>a[i]>>b[i];//输入
sort(a,a+n);
sort(b,b+n);//由于起点终点的顺序对答案不产生影响,对a数组和b数组进行排序
for(int i=0;i<n;i++)
{
l+=b[i]-a[i];//加上当前线段长度
if(i+1<n)//如果这条线段不是最后一条线段
if(b[i]>a[i+1])//如果这条线段与前一条线段有重复
l-=b[i]-a[i+1];//减去重复部分
}
cout<<l;//输出
return 0;
}
p1496
最新推荐文章于 2024-07-13 10:27:01 发布