[编程题-蘑菇街]聊天

[编程题] 聊天
A和B是好友,他们经常在空闲时间聊天,A的空闲时间为[a1 ,b1 ],[a2 ,b2 ]..[ap ,bp ]。B的空闲时间是[c1 +t,d1 +t]..[cq +t,dq +t],这里t为B的起床时间。这些时间包括了边界点。B的起床时间为[l,r]的一个时刻。若一个起床时间能使两人在任意时刻聊天,那么这个时间就是合适的,问有多少个合适的起床时间?

输入描述:
第一行数据四个整数:p,q,l,r(1≤p,q≤50,0≤l≤r≤1000)。接下来p行数据每一行有一对整数ai,bi(0≤ai<bi≤1000)表示a的时间表,接下来p行每行一对整数ci,di(0≤ci,di≤1000)表示b的时间表。保证a
i+1>bi,ci+1>di

输出描述:
输出答案个数

输入例子:
2 3 0 20
15 17
23 26
1 4
7 11
15 17

输出例子:
20
#include<iostream>
#include<vector>
#include<utility>
using namespace std;
bool isOverlap(vector<vector<int>>&a, vector<vector<int>>&b, int t)
{
    for(int i=0;i<b.size();i++)
    {
        for(int j=0;j<a.size();j++)
        {
            if( (a[j][0]<=b[i][0]+t) && (b[i][0]+t<=a[j][1]))
                return true;
               if( (b[i][0]+t<=a[j][0]) && (a[j][0]<=b[i][1]+t))
                return true;
        }
    }
    return false;
}
int main()
{
    int p,q,l,r;
    while(cin>>p>>q>>l>>r)
    {
        vector<vector<int>> a(p,vector<int>(2,0));
        for(int i=0;i<p;i++)
        {
            int x,y;
            cin>>x>>y;
            a[i][0]=x;
            a[i][1]=y;
        }
        vector<vector<int>> b(q,vector<int>(2,0));
        for(int i=0;i<q;i++)
        {
            int x,y;
            cin>>x>>y;
            b[i][0]=x;
            b[i][1]=y;
        }
        int cnt=0;
        for(int t=l;t<=r;t++)
        {
            if(isOverlap(a,b,t))
                cnt++;
        }
        cout<<cnt<<endl;
    }
}
原文地址:https://www.cnblogs.com/learning-c/p/5743689.html