• bzoj 2802 [Poi2012]Warehouse Store STL


     [Poi2012]Warehouse Store

    Time Limit: 10 Sec  Memory Limit: 64 MBSec  Special Judge
    Submit: 621  Solved: 295
    [Submit][Status][Discuss]

    Description


    有一家专卖一种商品的店,考虑连续的n天。
    第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他。
    如果要满足顾客的需求,就必须要有足够的库存。问最多能够满足多少个顾客的需求。

    Input

    第一行一个正整数n (n<=250,000)。
    第二行n个整数A1,A2,...An (0<=Ai<=10^9)。
    第三行n个整数B1,B2,...Bn (0<=Bi<=10^9)。

    Output

    第一行一个正整数k,表示最多能满足k个顾客的需求。
    第二行k个依次递增的正整数X1,X2,...,Xk,表示在第X1,X2,...,Xk天分别满足顾客的需求。

    Sample Input

    6
    2 2 1 2 1 0
    1 2 2 3 4 4

    Sample Output

    3
    1 2 4

    HINT

     

    Source

    鸣谢Oimaster

    题解:

      这道题目发现可以倒着来贪心,就是,今天的货存可以给当天至n天的,

      不能给以前的,所以每次可以给后面最小的b[i]即可。

      就是剩余的库存+现在的,来满足后面最小的需求。

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<queue>
     6 #include<algorithm>
     7 
     8 #define N 250007
     9 #define inf 1000000000
    10 #define pa pair<int,int>
    11 using namespace std;
    12 int read()
    13 {
    14     int x=0;char ch=getchar();
    15     while(ch<'0'||ch>'9')ch=getchar();
    16     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    17     return x;
    18 }
    19 
    20 int n,ans,top;
    21 int a[N],b[N];
    22 bool dis[N];
    23 priority_queue<pa,vector<pa>,greater<pa> >q;
    24 
    25 int main()
    26 {
    27     n=read();
    28     for(int i=1;i<=n;i++)
    29         a[i]=read();
    30     for(int i=1;i<=n;i++)
    31         b[i]=read();
    32     for(int i=n;i;i--)
    33     {
    34         q.push(make_pair(b[i],i));
    35         while(a[i]&&!q.empty())
    36         {
    37             int t=q.top().first,id=q.top().second;
    38             q.pop();
    39             int mn=min(t,a[i]);
    40             t-=mn;a[i]-=mn;
    41             if(t)q.push(make_pair(t,id));
    42             else ans++;
    43         }
    44     }
    45     printf("%d
    ",ans);
    46     while(!q.empty())
    47     {
    48         dis[q.top().second]=1;
    49         q.pop();
    50     }
    51     for(int i=1;i<=n;i++)
    52         if(!dis[i])printf("%d ",i);
    53 }
  • 相关阅读:
    java 缓存框架java caching system使用示例
    2020牛客寒假算法集训营2
    VJ train1 O统计问题 题解
    ACM#学习心得0
    2020牛客寒假集训营1
    高精度加减乘除
    VJ train1 I彼岸
    VC编译常见错误
    EVC开发MapXMobile 环境搭建
    用Evc+Pocket PC 2003 开发MapxMobie
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/8097933.html
Copyright © 2020-2023  润新知