zoukankan      html  css  js  c++  java
  • BZOJ2802Warehouse Store题解

    链接

    我太菜了,连贪心题都不会写。。。

    贪心思路很简单,我们能满足顾客就满足他,如果满足不了,就看之前的顾客中

    有没有需求比该顾客多的顾客,如果有的话改为卖给这位顾客会使解更优

    所以我们用一个优先队列维护一下所有卖的顾客,然后每此判断一下就好了

    # include<iostream>
    # include<cstdio>
    # include<algorithm>
    # include<cstring>
    # include<cmath>
    # include<queue>
    using namespace std;
    typedef long long LL;
    priority_queue<pair<int,int> > q;
    const int mn = 250005;
    int n;
    int a[mn],b[mn],st[mn],cnt;
    bool vis[mn];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
            scanf("%d",&b[i]);
        LL now=0;
        for(int i=1;i<=n;i++)
        {
            now+=a[i];
            if(now-b[i]>=0)
            {
                q.push(make_pair(b[i],i));
                vis[i]=1;
                now-=b[i];
            }
            else if(!q.empty()){
                pair<int,int> tmp=q.top();
                if(tmp.first>b[i] && now+tmp.first-b[i]>=0)
                {
                    q.pop();
                    vis[tmp.second]=0;
                    now=now+tmp.first-b[i];
                    vis[i]=1;
                    q.push(make_pair(b[i],i));
                }
            }
        }
        for(int i=1;i<=n;i++)
            if(vis[i]) st[++cnt]=i;
        printf("%d
    ",cnt);
        for(int i=1;i<=cnt;i++)
            printf("%d ",st[i]);
        return 0;
    }

     

  • 相关阅读:
    [题解]luogu-P1494 小Z的袜子 普通莫队
    [板子] 线性基
    [板子]字符串-KMP与AC自动机
    [板子]线段树求逆序对
    任务表
    [学习笔记]数列分块入门九题[LOJ6277-6285]
    Python常用高级函数
    Python的闭包和装饰器
    Python的迭代器和生成器
    Python的命名空间
  • 原文地址:https://www.cnblogs.com/logeadd/p/9600490.html
Copyright © 2011-2022 走看看