#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<pair<int,int>> H;//存储H的装车时间段
vector<pair<int,int>> W;//存储W的装车时间段
int n;//时间段数量
cin>>n;
for(int i=0;i<n;i++)
{
pair<int,int> tmp;
cin>>tmp.first>>tmp.second;
H.push_back(tmp);
}
for(int i=0;i<n;i++)
{
pair<int,int> tmp;
cin>>tmp.first>>tmp.second;
W.push_back(tmp);
}
int i=0;
int j=0;
int sum=0;//记录两人聊天时间之和
while(i<n && j<n)
{
if( H[i].second <= W[j].first)//时间段不相交,且H在前W在后
{
i++;
}
else if(H[i].first>=W[j].second)//时间段不相交,且H在前W在后
{
j++;
}
else//时间段相交时,两人可以聊天
{
int l=max(H[i].first,W[j].first);//相交区域左边界
int r=min(H[i].second,W[j].second);//相交区域右边界
sum+=(r-l);//聊天时间
//要注意:有可能H或者W的下一次时间段还有可能和这一次的时间段相交
if(H[i].second<W[j].second)
i++;
else if(H[i].second>W[j].second)
j++;
else
{
i++;
j++;
}
}
}
cout<<sum;
return 0;
}
CCF 201809-2 试题名称: 买菜
最新推荐文章于 2024-09-08 20:09:39 发布