codeforces 848c

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; }
原文地址:https://www.cnblogs.com/pprp/p/7411972.html