201809-2 买菜
双指针问题,分别两个指针指向两个数组,判断重叠。并根据两者的end时间,判断哪个指针向后移
代码
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
struct node{
int s;
int e;
};
int main(){
int n;
cin>>n;
vector<node> a;
vector<node> b;
for( int i = 0; i < n; i++){
node temp;
cin>>temp.s>>temp.e;
a.push_back(temp);
}
for( int i = 0; i < n; i++){
node temp;
cin>>temp.s>>temp.e;
b.push_back(temp);
}
int i = 0;
int j = 0;
int sum = 0;
while(i<a.size() && j < b.size()){
if(a[i].e > b[j].s && a[i].s < b[j].e){
sum += min(a[i].e,b[j].e)-max(a[i].s,b[j].s);
}
if(a[i].e > b[j].e){
j++;
}else if(a[i].e < b[j].e){
i++;
}else{
i++;
j++;
}
}
cout<<sum<<endl;
return 0;
}