直接双重循环
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int main()
{
int n;
cin >> n;
vector<PII> v1,v2;
for(int i=0;i<n;i++)
{
int l,r;
cin >> l >> r;
v1.push_back({l,r});
}
for(int i=0;i<n;i++)
{
int l,r;
cin >> l >> r;
v2.push_back({l,r});
}
int res=0;
for(int i=0;i<v1.size();i++)
{
int l=v1[i].first,r=v1[i].second;
for(int j=0;j<v2.size();j++)
{
if(v2[j].first>=r) break;
else if(v2[j].second<=l) continue;
else if(v2[j].first<=l)
{
res+=min(r,v2[j].second)-l;
}
else if(v2[j].first>l)
{
res+=min(r,v2[j].second)-v2[j].first;
}
}
}
cout << res << endl;
return 0;
}
本文介绍了一个使用直接双重循环的方法,通过两个向量v1和v2存储区间的边界,计算如何使v2中的区间不重叠地覆盖v1中的区间,最终求得重叠部分的总长度。
517

被折叠的 条评论
为什么被折叠?



