P2255 [USACO14JAN]Recording the Moolympics S

https://www.luogu.com.cn/problem/P2255
涉及知识点:区间贪心,排序
黄色题
思路:

这题是一道区间贪心。

一般的区间贪心题是给你 N 个区间,你的任务是尽量让更多的区间两两不重合。

对于一般的区间问题,我们要把每个区间的右端点从小到大排序,再按排好序的顺序来处理,因为这样可以使每个任务结束时间更早,以便安排下一个区间。

一般的区间贪心题有自私的放牧线段覆盖。(其实是一模一样的题目,你交同一份代码都能AC,暗示着双倍经验

接下来看这道题,这道题与一般的区间贪心的唯一区别是约翰的录音机非常神奇,可以同时记录两个节目。(两个节目的声音互相干扰真不知道约翰怎么录的)于是我们可以看做约翰有两个录音机,每一个都可以单独记录节目。我们每次处理节目,要尽量让每个录音机的空闲时间少,再按普通区间贪心的做法来解决。


结束时间越晚,与下一个节目的开始时间相距越短,空闲时间也就越少

代码:

#include<bits/stdc++.h>
using namespace std;
int n,ans;
struct node{
    int s,e;
}a[155];
bool cmp(node a,node b)
{
    return a.e<b.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 p1=0,p2=0;
    for(int i=1; i<=n; i++)
    {
        if(a[i].s>=p1&&p1>p2||(a[i].s>=p1&&a[i].s<p2))
        {
            ans++;
            p1=a[i].e;
        }
        else if(a[i].s>=p2)
        {
            ans++;
            p2=a[i].e;
        }
    }
    cout<<ans;
    return 0;
} 

 

 

posted @ 2022-07-15 14:02  -イレイナ  阅读(52)  评论(0)    收藏  举报