C++实现
思路:
将各个时间段用数组存起来,包含头但是不包含尾。比如[1,3],在数组中,我们只把下标为1和2的数组元素设置为1,而不设置下标为3的元素。 当输入第一个人的时候,修改数组元素。 输入第二个人的时候,判断对应下标元素是否为1,便可知道二人时间是否重叠,也就是可以聊天的时间。
代码
#include <iostream>
using namespace std
;
int main(int argc
, char** argv
) {
int n
;
scanf("%d",&n
);
int start
=0;
int e
=0;
int count
=0;
int * arr
= new int[1000000];
for(int i
=0;i
<n
;i
++){
scanf("%d %d",&start
,&e
);
for(int j
=start
;j
<e
;j
++){
arr
[j
]=1;
}
}
for(int i
=0;i
<n
;i
++){
scanf("%d %d",&start
,&e
);
for(int j
=start
;j
<e
;j
++){
if(arr
[j
]==1){
count
++;
}
}
}
printf("%d",count
);
return 0;
}
注意点
由于数组长度较大,所以一般的创建数组方式是不行的,改用以下代码:
int * arr
= new int[1000000];
相似题目
CSP中,画图一题和该题相似,只是用的是二维数组。 戳这里:画图