一个奇怪但是简单的做法
思路就是强行用数组表示数轴。
比如数组下标本来是i = 0、1、2、3…
现在用i=0表示数轴上的x=1点(因为本题时间从1开始),用i=2表示数轴上的x=2点,而i=1就自然表示0-1这一个区间。
这个题本质上就是看二者时间区间重合的数量(整数设定),所以最后只需要匹配i=奇数的位置。
代码
#include<iostream>
using namespace std;
const int M = 2e6 + 10;
int H[M];
int main(){
int n;
cin >> n;
int time = 0;
for(int i=0; i<n; i++){
int a, b;
cin >> a >> b;
for(int j=2*a-1; j<=2*b-3; j += 2) H[j] = 1;
}
for(int i=0; i<n; i++){
int c, d;
cin >> c >> d;
for(int j=2*c-1; j<=2*d-3; j += 2){
if(H[j] == 1) time++;
}
}
cout << time << endl;
return 0;
}