基本算法练习——聊天
原创
©著作权归作者所有:来自51CTO博客作者wx62c2ea9a5dac8的原创作品,请联系作者获取转载授权,否则将追究法律责任
问题描述:
多个时间段,查看是否有重合点。 本质上还是 一维数组 在数轴上的问题。
算法如下:
#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%,较为简单。 需要注意,在多重循环中加入了 标识进行优化。