一个典型的map映射题,直接看代码吧
#include <bits/stdc++.h>
using namespace std;
//pair<int,int> H,W;
map<pair<int,int>,int> Hstay,Wstay;
int main(){
long long int n,maxnum1=0,maxnum2=0;
cin>>n;
long long int sum=0;
for(int i=1;i<=n;i++){
int a,b;
cin>>a>>b;
maxnum1=b;
for(int j=a;j<b;j++){
Hstay[make_pair(j,j+1)]=1;
}
}
for(int i=1;i<=n;i++){
int c,d;
cin>>c>>d;
maxnum2=d;
for(int j=c;j<d;j++){
Wstay[make_pair(j,j+1)]=1;
}
}
maxnum1=max(maxnum1,maxnum2);
for(int i=1;i<maxnum1;i++){
if(Hstay[make_pair(i,i+1)]&&Wstay[(make_pair(i,i+1))]) sum++;
}
cout<<sum;
}
/*
4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14
*/
Hstay表示H所在的时间段,Wstay表示W所在的时间段,前面的pair<int,int>表示所在时间段的映射,比如Hstay[make_pair(5,6)]表示H在5到6之间在装菜,当两个stay的映射同时为1时,表示两个人那个时间段都在装菜,则可以交流,sum++。
相似题链接:CCF2019-2回收站选址