vijos 1165_火烧赤壁_离散

来源:互联网 发布:洞庭湖淘宝店 编辑:程序博客网 时间:2024/04/19 06:14

题目大意

给很多线段,求全部线段的长,相交不重复计算


思路

和挤牛奶相似,离散一下就可以了


#include <stdio.h>#include <algorithm>#define max(x,y) x>y?x:yusing namespace std;struct arr{    int x,y;};arr a[30001];int cam(arr a,arr b){    return a.x<b.x;}int main(){    int n,m,p;    scanf("%d",&n);    if (p+1<m) m=p+1;    for (int i=1;i<=n;i++)    {        int x,y;        scanf("%d%d",&x,&y);        a[i].x=x;        a[i].y=y;    }    sort(a+1,a+n+1,cam);    int begin=a[1].x,end=a[1].y,ans=0,ans1=a[1].y-a[1].x;    for (int i=2;i<=n;i++)    {        if (a[i].x<=end)        {            if (a[i].y>end)                end=a[i].y;        }        else         {            ans+=end-begin;            begin=a[i].x;            end=a[i].y;        }    }    ans+=end-begin;    printf("%d\n",ans);}
1 0
原创粉丝点击