zoukankan      html  css  js  c++  java
  • [洛谷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。

    Solution

    P2073

    现在碰到平衡树的题目一般都是vector或者是set水过去,

    比如这道题....

    题目要求不能重复,set啊,什么都不用判断,直接插入,方便

    只是要注意的set的end函数和vector一样是开区间,而set的迭代器又只支持
    (--)(++)操作,所以在删除最大值的时候记得将迭代器(--)


    Code

    #include<bits/stdc++.h>
    #define lol long long
    #define il inline
    #define rg register
    #define Min(a,b) (a)<(b)?(a):(b)
    #define Max(a,b) (a)>(b)?(a):(b)
    
    using namespace std;
    
    const int N=1e5+10;
    
    void in(lol &ans)
    {
        ans=0; lol f=1; char i=getchar();
        while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
        while(i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+i-'0', i=getchar();
        ans*=f;
    }
    
    struct node {
        lol x,v;
        bool operator < (const node & a) const {return v<a.v;}
    };
    set<node>v;
    
    int main()
    {
        lol op,x,y; node tmp;
        while(1) {
            in(op);
            if(op==1) {
                in(x),in(y);
                tmp = (node) {x,y};
                v.insert(tmp);
            }
            else if(op==2) {if(v.size()) v.erase(--v.end());}
            else if(op==3) {if(v.size()) v.erase(v.begin());}
            else {
                lol ans1=0,ans2=0;
                for(set<node>::iterator it=v.begin();it!=v.end();it++) ans1+=(*it).x,ans2+=(*it).v;
                printf("%lld %lld
    ",ans1,ans2);
                return 0;
            }
        }
        return 0;
    }
    

    博主蒟蒻,随意转载.但必须附上原文链接

    http://www.cnblogs.com/real-l/

  • 相关阅读:
    C#程序调试
    jsp连接sql数据库
    SQL记录
    对于和/的小问题:证明路径中可以混合使用斜杠和反斜杠
    集合初识
    details.jsp页面的 response.addCookie(cookie);报错&tomcat高版本下的Cookie问题
    sql查询操作—顺序查询
    myeclipse使用Microsoft JDBC Driver 6.0 for SQL Server连接sql
    JavaScript、Java、C#关于for循环的比较
    关于jsp动作元素的一点疑惑
  • 原文地址:https://www.cnblogs.com/real-l/p/9594465.html
Copyright © 2011-2022 走看看