题目意思很清晰,给定一定数量的区间,求区间的交集长度之和
由于n的数据范围较小,我们可以暴力枚举所有可能的情况
然后对每两个区间,我们可以通过判断筛选出有交集的两个区间,然后用右边界的较小值减去左边界的较大值即得到两个区间的交集,最后叠加即可
#include<iostream> using namespace std; int n,ans; typedef struct Node{ int st,ed; }Node; Node arr1[2005]; Node arr2[2005]; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>arr1[i].st>>arr1[i].ed; } for(int i=1;i<=n;i++){ cin>>arr2[i].st>>arr2[i].ed; } for(int i=1;i<=n;i++){ int st1=arr1[i].st,ed1=arr1[i].ed; for(int j=1;j<=n;j++){ int st2=arr2[j].st,ed2=arr2[j].ed; if(ed2<=st1)continue; if(st2>=ed1)break; int time=min(ed2,ed1)-max(st1,st2); ans+=time; } } cout<<ans<<endl; return 0; }
CCF-CSP 201809-2 买菜
最新推荐文章于 2024-07-21 13:38:21 发布