蒟蒻的小窝

蒟蒻的小窝

题解 P2255 【[USACO14JAN]Recording the Moolympics S】

posted on 2020-08-15 19:49:32 | under 题解 |

如果只有一台摄像机的话只需要将节目按左端点从大到小排序,如果当前的节目的右端点大于上之前已经左端点,那就不取,否则就取它。但这里有两台摄像机,所以把存两个端点,第一台和第二台的,每次都先把能给第二台摄像机的节目都给第二台,不能给再试着给第一台,当第一台的左端点大于第二台是互换一下就OK了。

Code:

#include<cstdio>
#include<algorithm>
#define maxn 155
using namespace std;
int N,ans;
struct ZS{
    int s,t;
    bool operator <(const ZS b)const{return t<b.t;}
}a[maxn];
inline int read(){
    int ret=0;char ch=getchar();
    while (ch<'0'||ch>'9') ch=getchar();
    while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
    return ret;
}
int main(){
    N=read();
    for(int i=1;i<=N;i++) a[i].s=read(),a[i].t=read();
    sort(a+1,a+1+N);
    int lst1=0,lst2=0;
    for (int i=1;i<=N;i++)
      if (a[i].s<lst1) continue;else
      if (a[i].s<lst2) lst1=lst2,lst2=a[i].t,ans++;else lst2=a[i].t,ans++;
    printf("%d\n",ans);
    return 0;
}