2017-08-22 15:42:44
writer:pprp
参考:http://blog.csdn.net/qq_37497322/article/details/77463376#comments
本来题意也不是很清楚,想到的只有桶排序,但是很明显,会TLE
看了许多别人的代码都不是很明白,看了上边这位大佬的代码以后清楚了一点
题意说明:
你有两台电视,你可以同时看两台,但是如果这台电视节目结束,但同时另一个节目开始不行
#include <bits/stdc++.h>
using namespace std;
struct node
{
int s,t;
int d;
}a[200005];
int cmp(node x,node y)//节目开始时间从小到大排,相同结束时间早的在前
{
if(x.s!=y.s)
return x.s<y.s;
return x.t<y.t;
}
struct tv
{
int e;//记录电视节目的结束时间
int tag;//记录电视的开闭
}t[2];
int main()
{
int i,n,flag=1;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].s,&a[i].t);
}
sort(a,a+n,cmp);
t[0].e=-1;
t[1].e=-1;
t[0].tag=0;
t[1].tag=0;
for(i=0;i<n;i++)//模拟电视的开闭
{
if(a[i].s>t[0].e)//根据节目的结束时间清除电视的状态
{
t[0].tag=0;
}
if(a[i].s>t[1].e)
{
t[1].tag=0;
}
if(!t[0].tag)//如果第一台可以看
{
t[0].tag=1;
t[0].e=a[i].t;
}
else if(!t[1].tag)
{
t[1].tag=1;
t[1].e=a[i].t;
}
else
{
flag=0;
break;
}
}
if(flag)
printf("YES
");
else
printf("NO
");
return 0;
}