蓝桥杯 巧克力

2023-11-04

首先这是一道贪心思想的题目,贪心思想我觉得是考(思维+模拟)的题目。

正文:依据题目要求总价最少,那么我们就从价格低的巧克力开始选择。每一天放置一块巧克力。假如当前巧克力k1单价最便宜,保质期为k1.date,那么尽量把当前巧克力放置在第k1.date天的位置上,把前面的位置留出来给保质期短一些的巧克力(保质期短的当然无法放置在k1.date或者说大于其保质期的位置上),如果你占用了比你保质期短的巧克力位置,那么就会造成总价提升。如果k1.date的位置上有了巧克力了那就往前去找呗(往后找你也没有那么长保质期啊) 

#include<bits/stdc++.h>
#define get getchar
#define put putchar
#define il inline
#define is isdigit
#define dfor(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long ll;
const int N=1e5+1;
int n,x;
ll ans;//这道题极限数据单价是10的九次方,谁知道会不会爆int,保险起见用long long
set<int>s;
struct p 
{
    int val,date,cnt;
    il bool operator<(const p&b) const    //重载运算符没学过的同学下面会有函数判断的代码
    {
        if(val==b.val) return date>b.date;
        return val<b.val;
    }
    p(){}
    p(int aa,int bb,int cc)
    {
        val=aa,date=bb,cnt=cc;
    }
}node[N];
int read(void)//快读不会的同学可以不管下面会有没有快读快写的代码
{
    int x=0,f=1;
    char c=get();
    while(!is(c))
    {
        if(c=='-') f=-1;
        c=get();
    }
    while(is(c)) x=(x<<1)+(x<<3)+(c^48),c=get();
    return x*f;
}
void write(ll x)//快写
{
    if(x>9) write(x/10);
    put((x%10)^48);
}
int main()
{
    x=read(),n=read();
    int a,b,c;
    dfor(i,1,n) a=read(),b=read(),c=read(),node[i]=p(a,b,c);
    sort(node+1,node+n+1);
    int now=1;
    dfor(i,1,x) s.insert(i);    //用set去维护没有被放置巧克力的某一天,先把每一天都放进去,当某一天放置了巧克力就删去这一天
    while(s.size()&&now<=n)    //要是s.size()为0了那不每一天都有巧克力了吗,要是now都等于n了所有巧克力都被遍历了一定会有一个结果
    {   
        while(node[now].cnt&&s.size()&&node[now].date>=*s.begin())//cnt为0的话该巧克力被炫光了,s.size()同理,set自身是升序排列,当前巧克力的保质期不能小于现有的最小天数(会过期啊)
        {
            ans+=node[now].val,--node[now].cnt;//选一块巧克力就加上其价格,数量减一
            auto i=s.upper_bound(node[now].date);//upper_bound找出大于目标的第一个数,找不到就返回对应的end,为什么不用lower_bound(找出大于等于目标的第一个数..),因为你选择的保质期有可能是放置在小于你保质期前面的
            --i,s.erase(i);//--找到你应该放置的位置,删去这个位置
        }
        ++now;//下一个种类
    }
    if(s.size()) puts("-1");
    else write(ans);
    return 0;
}
#include<bits/stdc++.h>
#define get getchar
#define put putchar
#define il inline
#define is isdigit
#define dfor(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long ll;
const int N=1e5+1;
int n,x;
ll ans;
set<int>s;
struct p 
{
    int val,date,cnt;
    p(){}
    p(int aa,int bb,int cc)
    {
        val=aa,date=bb,cnt=cc;
    }
}node[N];
bool cmp(p a,p b)
{
  if(a.val==b.val) return a.date>b.date; //单价一样肯定选择保质期长的啊
  return a.val<b.val;//单价低在前面先选
}
int main()
{
    cin>>x>>n;
    int a,b,c;
    for(int i=1;i<=n;++i) cin>>a>>b>>c,node[i]=p(a,b,c);
    sort(node+1,node+n+1,cmp);
    int now=1;
    for(int i=1;i<=x;++i) s.insert(i);
    while(s.size()&&now<=n)
    {   
        while(node[now].cnt&&s.size()&&node[now].date>=*s.begin())
        {
            ans+=node[now].val,--node[now].cnt;
            auto i=s.upper_bound(node[now].date);
            --i,s.erase(i);
        }
        ++now;
    }
    if(s.size()) puts("-1");
    else cout<<ans;
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯 巧克力 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Python轻松爬取Rosimm写真网站全部图片

    RosimmImage 爬取Rosimm写真网站图片 有图有真相 def main start url 爬虫入口 主要爬取操作 try r requests get url html headers HEADERS timeout 10 t
  • token由来

    https www cnblogs com bigben0123 p 8334824 html
  • compiler之automatic memory management以及Java GC

    基本方案就3种 1 mark and sweep 2 stop and copy 会用到copy graph算法 见leetcode 3 reference counting 前2种方案GC是一个是独立的过程 要先进行扫描 object g
  • Java Portlet 规范概述

    首先 解释几个基本的术语 1 Portal Portal 是一种 web 应用 通常具有个性化 单点登录 来自不同源的内容聚合 aggregation 并提供信息系统表现层等特点 所谓聚合 是指将不同来源的内容整合到一个 web 页面的操作
  • awk传入变量

    for chr in 1 22 do awk v nvar chr print 1 t nvar t 4 t 3 t 4 chr chr LD map gt chr chr LD1 map done
  • js-事件及事件委托

    1 事件 当用户浏览网页时 存在许许多多与网页交互的操作 例如按钮的点击 屏幕的滑动 鼠标的移动等等 通过这些交互完成某些操作 达到某种效果 我们可以将这些交互称之为事件 2 事件冒泡 事件冒泡是指事件在某个元素上触发后一直向上传播 父元素
  • 【个人项目】——细腻的人像分割

    项目地址 segmentation pytorch 前面介绍了 一个人像分割数据集 这里采用该数据做了人像分割的小demo Supervisely 人像分割数据集格式转换 1 测试 1 1 环境采用本机的torch140 1 2 下载预训练
  • 分享网友第一次开发EOS区块链总结的经验

    在处理项目时 用Java Connector for EOS区块链编写 创建钱包 创建帐户 创建交易 创建签名交易 在帐户之间转移代币 我遇到了各种和运行本地EOS节点需要遵循的基本步骤 这个小指南纯粹是为了帮助你启动和运行自己的EOS节点
  • Docker容器内部 DNS 解析失败的问题

    上段时间遇到了 docker 容器内部 dns 解析失败的问题 发现在 docker run 启动容器之后 容器内部访问外部的接口总是提示无法解析 dns 然而容器外部是可以解析的 dns的配置也没有任何问题 用 docker exec i
  • 如何使用CSS画一个三角形

    原理 其实就是规定元素的四个边框颜色及边框宽度 将元素宽高设置为0 如果要哪个方向的三角形 将对应其他三个方向的边框宽和颜色设置为0和透明transparent即可 1 元素设置边框 宽高 背景色 div class border div
  • 启动hadoop时异常:connect to host hadoop002 port 22 Connection refused

    问题描述 今天在搭建hadoop伪分布式集群时 启动hadoop 报如下异常情况 hadoop002 也就我设置的Secondary namenode 拒绝连接 启动Secondary namenode失败 root hadoop1 sta
  • JDK8新特性之Stream流

    目录 一 简介 二 Stream流的应用 2 1 为什么使用stream流 2 2 Stream流的原理 2 3 步骤 2 4 获取Stream流对象的方式 2 5 Stream流的API方法 2 5 1 map 2 5 2 collect
  • SQL注入基础

    引言 靓仔们是否经常听到sql注入呢 那么sql注入到底是什么 引用微软官方的语言来说 SQL 注入是一种攻击方式 在这种攻击方式中 在字符串中插入恶意代码 然后将该字符串传递到 SQL Server 的实例以进行分析和执行 构成 SQL
  • 【数据结构c++】双指针(九)

    1 双指针 两数之和 II 输入有序数组 https leetcode cn com problems two sum ii input array is sorted class Solution public vector
  • poj 1330 Nearest Common Ancestors

    Problem poj org problem id 1330 vjudge net contest 80844 problem C Meaning 求最近公共祖先 Note 真 LCA 模版题 那就备份一发 LCA 模版 链式前向星存图
  • php+layui实战,做一个轻社区

    本来业务需要搭建一个轻社区 本着这个方向做了些低成本实现的调研 最终选择了layui作为前端模板 这样一个后端研发同学就可以轻松搞定了 顺便实现了个练手站 先看版块 目前设计的版块 包含文章 问答 圈子 用户级级别 身份 密码找回 邮箱激活
  • 如何将字符串str转为float数组

    麻烦点个赞 今天在学习过程中遇到了将字符串转为数组的问题 以下是解决方案 如果数据格式正确 数据已经被放到数组里了 的话直接一行代码就能解决直接改变类型就可以 你的代数据如果直接长这个样子那就直接运行下面那一行代码 import numpy
  • 第11天-审批中心

    2 工作流介绍 2 1 概念介绍 工作流 Workflow 就是通过计算机对业务流程自动化执行管理 它主要解决的是 使在多个参与者之间按照某种预定义的规则自动进行传递文档 信息或任务的过程 从而实现某个预期的业务目标 或者促使此目标的实现
  • 计算机c盘满了怎么移到d盘去,Win10电脑c盘满了怎么转移到d盘?

    许多用户在使用电脑的时候因为不良的使用习惯 经常将一些文件或者程序安装在电脑的C盘中 最终导致C盘爆满电脑卡顿 那么我们要怎么把C盘的文件转移D盘呢 下面小编就带着大家一起看看吧 操作方法 1 双击 这台电脑 打开 在这台电脑中我们就可以看
  • 蓝桥杯 巧克力

    首先这是一道贪心思想的题目 贪心思想我觉得是考 思维 模拟 的题目 正文 依据题目要求总价最少 那么我们就从价格低的巧克力开始选择 每一天放置一块巧克力 假如当前巧克力k1单价最便宜 保质期为k1 date 那么尽量把当前巧克力放置在第k1