1 条题解

  • 1

    将起点与终点分别排序,依次相加,在比较前一项终点与后一项起点判断是否有重叠,若有则减去重叠部分:

    #include<bits/stdc++.h>
    using namespace std;
    int a[100010],b[100010];
    inline int read()
    {
    	int x=0,f=1;
    	char c=getchar();
    
    	while(c<'0'||c>'9')
    	{
    		if(c=='-')f=-1;
    		c=getchar();
    	}
    	while(c>='0'&&c<='9')
    	{
    		x=x*10+c-'0';
    		c=getchar();
    	}
    return x*f;
    }
    int main()
    {
    	int n;
    	long long m=0;
    	n=read();
    	for(int i=1;i<=n;i++)
    	{
    		a[i]=read();
    		b[i]=read();
    	}
    	sort(a+1,a+n+1);sort(b+1,b+n+1);
    	for(int i=1;i<=n;i++)
    	{
    		m+=b[i]-a[i];
    		if(i+1<=n)
    		{
    			if(b[i]>a[i+1])
    			{
    					m-=-a[i+1]+b[i];
    			}
    		
    		}
    	}
    	cout<<m;
    	return 0;
    }
    
    • 1

    信息

    ID
    824
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    9
    已通过
    4
    上传者