(1)题目描述
(2)算法思想
方法一
根据输入的空闲时段标记空闲时间,从两方初始空闲时段的最大值开始遍历至末尾空闲时段的最小值,若当前时刻两方都标记为空闲时间则可交谈时间++。
这种方法比较便于理解且易于实现,此处时间规模不大不会出现超时现象,但空间消耗较大。
方法二
以时段为变量,判断两时段是否有重叠,在得到重叠时段前不断进行下一时段的寻找,得到重叠时段后,若再次出现不重叠时段则标记下一轮寻找的起点时段并跳出当前循环;重复该过程直至遍历所有时段。
这种方法空间消耗较小,且在时间规模较大时由于时段数量远小于时间长度运行会比较快,但是实现过程需要一定的思考。
(3)代码实现
方法一
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n;
cin>>n;
int sum=0;
int H[n][2];
int W[n][2];
for(int i=0; i<n; i++)
cin>>H[i][0]>>H[i][1];
for(int i=0; i<n; i++)
cin>>W[i