zoukankan      html  css  js  c++  java
  • 洛谷P2073 送花

    P2073 送花

    题目背景

    小明准备给小红送一束花,以表达他对小红的爱意。他在花店看中了一些花,准备用它们包成花束。

    题目描述

    这些花都很漂亮,每朵花有一个美丽值W,价格为C。

    小明一开始有一个空的花束,他不断地向里面添加花。他有以下几种操作:

    操作 含义

    1 W C 添加一朵美丽值为W,价格为C的花。

    3 小明觉得当前花束中最便宜的一朵花太廉价,不适合送给小红,所以删除最便宜的一朵花。

    2 小明觉得当前花束中最贵的一朵花太贵,他心疼自己的钱,所以删除最贵的一朵花。

    -1 完成添加与删除,开始包装花束

    若删除操作时没有花,则跳过删除操作。

    如果加入的花朵价格已经与花束中已有花朵价格重复,则这一朵花不能加入花束。

    请你帮小明写一个程序,计算出开始包装花束时,花束中所有花的美丽值的总和,以及小明需要为花束付出的总价格。

    输入输出格式

    输入格式:

    若干行,每行一个操作,以-1结束。

    输出格式:

    一行,两个空格隔开的正整数表示开始包装花束时,花束中所有花的美丽值的总和。以及小明需要为花束付出的总价格。

    输入输出样例

    输入样例#1:
    1 1 1
    1 2 5
    2
    1 3 3
    3
    1 5 2
    -1
    
    输出样例#1:
    8 5

    说明

    对于20%数据,操作数<=100,1<=W,C<=1000。

    对于全部数据,操作数<=100000,1<=W,C<=1000000。

    /*
        两个优先队列模拟
    */
    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<vector>
    using namespace std;
    int v[1000010],ans1,ans2;
    priority_queue<int>q1;
    priority_queue<int,vector<int>,greater<int> >q2;
    int main(){
        int x,y,z;
        while(1){
            scanf("%d",&x);
            if(x==1){
                scanf("%d%d",&y,&z);//mei li zhi,jia ge
                if(!v[z]){
                    v[z]=y;
                    ans1+=y;ans2+=z;
                    q1.push(z);q2.push(z);
                }
            }
            if(x==2){//删最贵的一朵花 
                while(!q1.empty()&&!v[q1.top()])q1.pop();
                if(!q1.empty()){
                    ans1-=v[q1.top()];
                    ans2-=q1.top();
                    v[q1.top()]=0;
                    q1.pop();
                }
            }
            if(x==3){//删最便宜的一朵花 
                while(!q2.empty()&&!v[q2.top()])q2.pop();
                if(!q2.empty()){
                    ans1-=v[q2.top()];
                    ans2-=q2.top();
                    v[q2.top()]=0;
                    q2.pop();
                }
            }
            if(x==-1){
                break;
            }
        }
        cout<<ans1<<' '<<ans2;
    }
  • 相关阅读:
    android基础开发之一setContentView用法
    setContentView( )方法
    如何使用andriod的布局标签
    也谈layout_gravity和gravity的用法
    SlidingMenu第二篇 --- SlidingMenu常用属性介绍
    SlidingMenu第一篇 --- 导入SlidingMenu库
    JS----对象的合并与克隆
    angular2 ----字符串、对象、base64 之间的转换
    WebStorm过期解决方法
    JavaScript--鼠标滚动改变图片大小
  • 原文地址:https://www.cnblogs.com/thmyl/p/7511127.html
Copyright © 2011-2022 走看看