正题
题目链接:
洛谷:https://www.luogu.org/problemnew/show/P1496
vijos:https://vijos.org/p/1165
大意
有n艘被烧了的船,给出头坐标和尾坐标,求被烧了的位置的总长度。
解题思路
先用离散化。把船的头坐标排序后就会好计算很多。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
struct fire{int x,y;
}a[40001];
int n,begin,end,sum;
bool cmp(fire xx,fire yy)
{return xx.x<yy.x;
}
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%d",&a[i].x,&a[i].y);}sort(a+1,a+1+n,cmp);//排序头坐标begin=a[1].x;end=a[1].y;sum=end-begin;for (int i=1;i<=n;i++){if (a[i].x>=end) {//与前面的船完全没有关联begin=a[i].x;end=a[i].y;sum+=end-begin;}else if (a[i].y<=end) continue;//与前面的船重合else//多出了一部分{sum+=a[i].y-end;end=a[i].y;}}printf("%d",sum);
}