问题描述:

    多个时间段,查看是否有重合点。 本质上还是 一维数组 在数轴上的问题。 

算法如下:

#include <iostream>
#include <vector>


using namespace std;

vector<pair<int,int>> abss;
vector<pair<int,int>> cds;

bool isOk0(int value){
bool flag = false;
for(int i=0;i<abss.size();i++){
for(int j=abss[i].first;j<=abss[i].second;j++){
if(j==value) {
flag =true;
break;
}
}
if(flag) break;
}
return flag;
}

bool isOk(int value){
bool flag =false;
for(int i=0;i<cds.size();i++){
for(int j=cds[i].first;j<=cds[i].second;j++){
flag = isOk0(j+value);
if(flag) break;
}
if(flag) break;
}
return flag;
}



int main(){
int p,q,l,r;
cin>>p>>q>>l>>r;
abss.resize(p);
cds.resize(q);
for(int i=0;i<p;i++){
int a,b;
cin>>a>>b;
abss[i]=pair<int,int>(a,b);
}
for(int i=0;i<q;i++){
int c,d;
cin>>c>>d;
cds[i]=pair<int,int>(c,d);
}
int count =0;
for(int i=l;i<=r;i++){
bool tag =isOk(i);
count+=tag;
}
cout<<count;

}

  算法评测100%,较为简单。  需要注意,在多重循环中加入了 标识进行优化