CCF201809-2 买菜
题目:
题目分析:
题目要求两个人时间段的交集,由于两个人的装车的时间段是变化的,不容易把控,我们可以以不变的时间为参照,把每个人的装车时间段在时间线标记,如果两个人都标记的,那么就是他们时间的交集。
具体做法:开一个大小为1000010的数组e(题目要求最大时间为1000000),如果j时间有人装车,则e[j]++;那么如果e[j]=2,说明两个人都装车,即时间交集。
需要注意:题目中的装车时间应该是从s开始,t结束,不包括t时间段!
//201809-2 买菜
#include<iostream>
using namespace std;
int a,b,c,d,n,e[1000010];
long long ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a>>b;
for(int j=a;j<b;j++)
e[j]++; //记录a--b装车
}
for(int i=1;i<=n;i++) {
cin>>c>>d;
for(int j=c;j<d;j++)
e[j]++; //记录c--d装车
}
for(int i=0;i<=b;i++)
//i<b或者i<d都可以,因为两个人相交的时间小于两个人最早结束装车的时间
if(e[i]==2)ans++;
cout<<ans<<endl;
return 0;
}