• P3545 [POI2012]HUR-Warehouse Store [堆贪心]


    HURWarehouse  StoreHUR-Warehouse Store

    题目描述见链接 .


    color{red}{正解部分}

    类似 这道题目, 都是使用堆进行 贪心 .


    color{red}{实现部分}

    #include<bits/stdc++.h>
    #define reg register
    typedef long long ll;
    typedef std::pair<int,int> pr;
    
    int read(){
            char c;
            int s = 0, flag = 1;
            while((c=getchar()) && !isdigit(c))
                    if(c == '-'){ flag = -1, c = getchar(); break ; }
            while(isdigit(c)) s = s*10 + c-'0', c = getchar();
            return s * flag;
    }
    
    const int maxn = 1e6 + 5;
    
    int N;
    int Ans;
    int A[maxn];
    int B[maxn];
    
    int main(){
            N = read();
            for(reg int i = 1; i <= N; i ++) A[i] = read();
            for(reg int i = 1; i <= N; i ++) B[i] = read();
            std::priority_queue <pr> Q;
            ll sum = 0;
            for(reg int i = 1; i <= N; i ++){
                    sum += A[i];
                    if(sum >= B[i]){
                            Q.push(pr(B[i], i));
                            sum -= B[i];
                            Ans ++;
                    }else if(!Q.empty()){
                            int top = Q.top().second;
                            if(B[top] > B[i]){
                                    Q.pop(), Q.push(pr(B[i], i));
                                    sum += B[top] - B[i];
                            }
                    }
            }
            printf("%d
    ", Ans);
            int cnt = 0;
            while(!Q.empty()) A[++ cnt] = Q.top().second, Q.pop();
            std::sort(A+1, A+cnt+1);
            for(reg int i = 1; i <= cnt; i ++) printf("%d ", A[i]);
            return 0;
    }
    
  • 相关阅读:
    Windows7共享设置
    13-运算符
    13-数据类型转换
    06-移动web之flex布局
    09-sass
    08-less预处理器
    移动端必须掌握知识点
    11-JS变量
    10-响应式
    07-rem
  • 原文地址:https://www.cnblogs.com/zbr162/p/11822491.html
Copyright © 2020-2023  润新知