牛客练习赛51 t4 羊吃草

羊吃草

https://ac.nowcoder.com/acm/contest/1083/D

牛客练习赛51 t4 羊吃草 题解

题意分析

  • 先给出n和q,n代表羊的数量,q代表下面给出的区间数量。
  • 然后两行代表每只羊吃草的能力范围,
    • 第一行代表第i只羊吃草范围的能力极限左端点,
    • 第二行代表第i只羊吃草范围的能力极限右端点,
  • 第三行开始q行代表要查询的区间,每次查询一个区间,问你有多少头羊能吃到草。
    • 每行给出,问你在Left到Right组成的区间内,最多能有多少头羊吃到草。
    • 每头羊只需要一个点的空间吃草。
  • 例如在1~5这个区间内查询,而羊有(1至1)、(1至2)、(1至3)、(1至4)、(1至5)的,则5头羊分别可以被安排到位置1、2、3、4、5吃草。答案是5。如果6头羊,答案也不会变。

解题思路

  • 贪心+堆,

    • 为什么想到贪心?

      首先我们不难想到,“要让这个区间里面更多的羊吃到草”,那不就是贪心了吗?

    • 为什么想到堆?

      ……我们对于每个点能不能让羊吃到草,应该是枚举这个区间。枚举这个区间,位置在从左往右移动的时候,当前点能够匹配的区间,一定要保证左端点小于等于自己,右端点大于等于自己。

      所以……

参考程序

#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
struct OneSheep
{
    int l,r;
} a[405];
bool cmp(OneSheep a,OneSheep b)
{
    return a.l<b.l;
}
int n,Query,ans;
priority_queue<int,vector<int>,greater<int> > pq;
int main()
{
    scanf("%d%d",&n,&Query);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i].l);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i].r);
    sort(a+1,a+1+n,cmp);
    int l,r,i;
    while(Query--)
        {
            scanf("%d%d",&l,&r);
            for(i=1;i<=n;i++)    
                if(a[i].l<l&&a[i].r>=l)
                    pq.push(a[i].r);
                else
                    if(a[i].l>=l)
                        break;

            for(;l<=r;l++)
                {
                    while(!pq.empty()&&pq.top()<l)
                        pq.pop();

                    while(i<=n&&a[i].l<=l)
                        {
                            pq.push(a[i].r);
                            i++;
                        }
                    if(!pq.empty())
                        {
                            ans++;
                            pq.pop();
                        }
                }
            while(!pq.empty())
                pq.pop();

            printf("%d\n",ans);
            ans=0;
        }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务