• 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。

    (set)容器

    将其按照第二关键字进行排序

    代码

    #include<bits/stdc++.h>
    using namespace std;
    struct node{
    	long long b,a;
    	bool operator < (const node& w) const
    	{
    		return b<w.b;
    	} //自定义比较的类型
    };
    set<node> S;
    int opt,k,q;
    long long ans1,ans2;
    int main()
    {
    	while(scanf("%d",&opt),opt!=-1)
    	{
    		if(opt==1)
    		{
    			scanf("%d%d",&k,&q);
    			S.insert({q,k});
    		}
    		if(opt==2)
    		{
    			if(S.size()>=1)
    			S.erase(--S.end());
    		}
    		if(opt==3)
    		{
    			if(S.size()>=1)
    			S.erase(S.begin());
    		}
    	}
    	for(set<node>::iterator it=S.begin();it!=S.end();it++)//利用迭代器进行迭代
    	{
    		ans1+=(*it).b;
    		ans2+=(*it).a;
    	}
    	cout<<ans2<<' '<<ans1<<endl;
    }
    
  • 相关阅读:
    Python变量小秘密
    Python编解码问题与文本文件处理
    Java持久层框架Mybatis入门
    teprunner重磅更新Git打通PyCharm与测试平台
    JMeter定时器设置延迟与同步
    Docker开启安全的TLS远程连接
    消息队列之如何保证消息的幂等性
    消息队列之如何保证消息的可靠传输
    spring技术内幕学习笔记01
    linux操作指南-04
  • 原文地址:https://www.cnblogs.com/bangdexuanyuan/p/13978861.html
Copyright © 2020-2023  润新知