看了其他大佬们的答案很多是用的求重叠区间的方法,一开始我也想用这个方法但是奈何我太菜了没写明白…
转念一想这种题可以好像可以用桶(因为和数组下标有关),用桶可以模拟出两个坐标轴,于是用桶简单粗暴地ac了(并没有,前两次因为没有注意ai bi ci di的取值只得了50分…)
下面说一下我的思路
其实原理就是用桶模拟出两个人的时间轴,让[ai,bi)这段数组的值为1(注意这个区间是左闭右开,这样才能模拟出时间的效果),当两个人在同一时刻,数组中的值都为1时,说明两个人都在装货,则他们可以聊天
下面贴上代码:
#include <bits/stdc++.h>
//桶排序
using namespace std;
//两个桶
int h[1000005],w[1000005];
long long sum;
int n,a,b;
int main(){
cin >> n;
//由于定义的是全局数组,所以我这里并没有初始化
//读入h数组
for(int i=0;i<n;i++){
cin >> a >> b;
//当属于区间a-b时,我们让下标为[a,b)的数字都变成1
for(int j=a;j<b;j++){
h[j] = 1;
}
}
for(int i=0;i<n;i++){
cin >> a >> b;
//这里也是同理
for(int j=a;j<b;j++){
w[j] = 1;
}
}
//把桶全部扫一遍,两个人都在的情况下就可以聊天
for(int i= 1;i<1000005;i++){
if(h[i] == 1 && w[i] == 1){
sum ++;
}
}
cout << sum;
return 0;
}