CCF认证201809-2买菜
#include<iostream>
#include<cmath>
using namespace std;
const int N=2000;
struct node{
int start;
int end;
};
node a[N+5];
node b[N+5];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].start>>a[i].end;
}
for(int i=1;i<=n;i++)
{
cin>>b[i].start>>b[i].end;
}
int sum=0;
int start1,end1,start2,end2;
for(int i=1,j=1;i<=n&&j<=n;)
{
start1=a[i].start;
end1=a[i].end;
start2=b[j].start;
end2=b[j].end;
if(start2<=end1&&start2>=start1)
{
sum+=min(end1-start2,end2-start2);
//cout<<"sum1="<<sum<<endl;
if(end2<end1)
{
j++;
}
else if(end2>end1)
{
i++;
}
else
{
i++;
j++;
}
}
else if(start1<=end2&&start1>=start2)
{
sum+=min(end1-start1,end2-start1);
//cout<<"sum2="<<sum<<endl;
if(end2<end1)
{
j++;
}
else if(end2>end1)
{
i++;
}
else
{
i++;
j++;
}
}
else if(end1<=start2)
{
i++;
}
else if(end2<=start1)
{
j++;
}
}
cout<<sum<<endl;
return 0;
}