题目链接:http://codeforces.com/contest/785/problem/B
题意:一个人喜欢编程和下棋两种课,所以两种课都参加(每种课都只用参加一次就可以),分别给定两种课的时间段,求使得所选两次课的最大时间间隔(因为这个人想要更多的休息时间)。
分析:直接找两组离得非常远的数据即可。
每次输入记录第一组数据的最晚的开始时间start1和最早的结束时间end1;
同理记录第二组数据(第二门课)的最晚开始时间start2和最早结束时间end2;
则最大的时间间隔就是max(start1-end2,start2-end1)。
代码:
#include <iostream>
#include<cstring>
#include<algorithm>
#include<map>
typedef long long ll;
using namespace std;
int main()
{
int n,m;
cin>>n;
int start1=0,end1=1000000001,start2=0,end2=1000000001;
for(int i=0;i<n;i++)
{
int a,b;
cin>>a>>b;
start1=max(start1,a); //大
end1=min(end1,b); //小
}
cin>>m;
for(int j=n;j<n+m;j++)
{
int a,b;
cin>>a>>b;
start2=max(start2,a); //大
end2=min(end2,b); //小
}
int ans=0;
ans=max(ans,start1-end2);
ans=max(ans,start2-end1);
cout<<ans<<endl;
return 0;
}