[USACO14JAN]Recording the Moolympics S
题目描述
农民约翰热衷于所有寒冷天气的运动(尤其是涉及到牛的运动), 农民约翰想录下尽可能多的电视节目。 moolympics 的节目时间表有 N 个不同的节目 (1≤N≤150),每个节目给定开始时间和结束时间。FJ 有一个双调谐器录音机,可以同时录制两个节目。 请帮助他确定他能录制的节目的最大数量。
题意还是比较难理解的,简要来说就是在求区间最大不相交数量的基础上加了一个维度,求两组不相交区间的数量和(基础是一组);
基本贪心还是一样的,但是要保证终点大的一组在前面先取,保证答案最大;
代码:
#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define ls k<<1
#define rs k<<1|1
#define inf 0x3f3f3f3f
using namespace std;
const int N=1100;
const int M=10000100;
const LL mod=1e9+7;
int n;
struct Node{
int s,e;
}a[N];
bool cmp(Node p,Node q){
if(p.e==q.e) return p.s<q.s;
return p.e<q.e;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i].s>>a[i].e;
sort(a+1,a+n+1,cmp);
int e1=0,e2=0,ans=0;
for(int i=1;i<=n;i++){
if(e1<e2) swap(e1,e2);
if(e1<=a[i].s){
e1=a[i].e;
ans++;
}
else if(e2<=a[i].s){
e2=a[i].e;
ans++;
}
}
cout<<ans<<endl;
return 0;
}