(贪心思想经典水题)题目链接:点击打开链接
题目大意:给出chess的n个上课时间段,给出process的m个上课时间段,要求中间能够休息的最长时间间隔。如果中间没有时间间隔,输出0。
分析:上课方式无非两种:先上chess后上process,那么由贪心思想,去找process的最晚开始时间(记为pl)和chess的最早结束时间(记为cr),这时的时间间隔为:pl-cr。同理,先上process后上chess,那么由贪心思想,去找chess的最晚开始时间(记为cl)和process的最早结束时间(记为pr),这时的时间间隔为:cl-pr。
这道题先对cl,cr,pl,pr进行初始化(初始化时格外小心),然后边读入数据边处理即可,处理时一定要牢记cl,cr,pl,pr的意义,否则判断条件很容易出错。
下面是AC代码
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
int l,r;
int cl,cr,pl,pr;
//下面的初始化非常重要,一定要在明确各自意义的基础上进行
cl=pl=0; //开始最晚
cr=pr=(int)1e9; //结束最早
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&l,&r);
if(l>cl)
cl=l;
if(r<cr)
cr=r;
}
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&l,&r);
if(l>pl)
pl=l;
if(r<pr)
pr=r;
}
int result=max(pl-cr,cl-pr);
if(result<0) result=0;
printf("%d\n",result);
return 0;
}