第十四届蓝桥杯三月真题刷题训练——第 1 天 第四题 巧克力题解

执 梗 执 梗 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

难点考虑当我们在考虑某一天时,总是纠结选价格低的还是选保质期短的,因为这会影响我们后面的选择。

 

如果我们无需关心后面,只着重与眼前,那么对于可以吃的巧克力,我们一定会选择最便宜的那种,这一定是正确的。

 

那么思考,什么时候是不需要考虑后面的天数呢 ?没错,我们倒着来考虑,先考虑最后一天能吃哪些巧克力,然后在所有能吃的巧克力中选一个最便宜的,接下来考虑倒数第二天。因为最后一天能吃的巧克力,在倒数第二天一定也能吃。 而且此时我们有可能可以添加一些巧克力,它在最后一天不能吃,而在倒数第二天能吃,显然从一堆巧克力中每次都要取出最小的,且需要动态维护增加和删除,那么我们需要想到优先队列。

将巧克力按保质期排序,然后从最后一天往第一天倒着考虑,每次将可以吃的巧克力放入优先队列中,如果发现某一天队列为空,说明无解。

 

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> PII;
#define pb(s) push_back(s);
#define SZ(s) ((int)s.size());
#define ms(s,x) memset(s, x, sizeof(s))
#define all(s) s.begin(),s.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int N = 200010;

int x, n;
void solve()
{
    cin >> x >> n;
    std::vector<pair<int, PII>> v(n);
    std::vector<int> cnt(n), c(n);
    for (int i = 0; i < n; ++i) {
        int a, b;
        cin >> a >> b >> c[i];
        v[i] = {b, {a, i}};
    }
    sort(all(v));
    priority_queue<PII, vector<PII>, greater<PII> >q;
    int l = n - 1;
    LL ans = 0;
    //倒着考虑
    for (int i = x; i >= 1; i--) {
        while (l >= 0 && v[l].first >= i) {
            q.push(v[l].second);
            l--;
        }
        if (q.size() == 0) {
            cout << -1 << '\n';
            return;
        }
        PII d = q.top();
        ans += d.first;
        cnt[d.second]++;
        if (cnt[d.second] == c[d.second]) q.pop();
    }
    cout << ans << '\n';
}
int main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int t = 1;
    while (t--)
    {
        solve();
    }
    return 0;
}

 

...全文

相关推荐

蓝桥杯国赛题之C++分巧克力.zip

蓝桥杯国赛 蓝桥杯国赛题之C++分巧克力

m0_57195758

解析蓝桥杯思维之真题训练:分巧克力

目录🍋其他真题🍋要点🍋源代码🍋其他真题 🍋其他真题 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足: 形状是正方形,边长是整数 大小相同 例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。 当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么? 输入 第一行包含两个整数N和

陈明月的代码日记

蓝桥杯真题·分巧克力解析.docx

C语言,包含解析与N-s流程图(流程图中即为代码演示)。

Yamai Yuzuru

真题解析│蓝桥杯省赛真题之分巧克力.pdf

蓝桥杯资源,算法,解析,真题,讲解

阿拉伯梳子

【蓝桥杯竞赛】2025年蓝桥杯往年试题分类整理:编程类真题与备考资源汇总文档的主要内容

内容概要:本文档对2025年蓝桥杯往年试题进行了分类整理,涵盖编程类真题、客观题与单片机专项、真题资源与学习平台以及备考建议。编程类真题包括算法与数据结构(如分巧克力问题、求和问题、天干地支等)和基础编程题(如武功秘籍、熊怪吃核桃、煤球数目等),涉及多种编程技巧与逻辑推导能力。客观题与单片机专项部分则针对数据结构、Python语法、数学基础等方面进行考察,并涵盖单片机方向的省赛真题与知识点。真题资源与学习平台介绍了官方题库、全真模拟卷、第三方平台(如Dotcpp、CSDN、百度题解库)及其提供的功能。备考建议方面,提出分模块突破编程题与客观题,并推荐利用官方及第三方资源进行限时模拟与针对性练习。 适合人群:准备参加蓝桥杯竞赛的学生及编程爱好者,尤其是对编程类题目、单片机专项有一定兴趣和基础的人群。 使用场景及目标:①帮助考生熟悉蓝桥杯的出题风格和题型分布;②通过练习历年真题,提升编程技能与应试能力;③利用官方及第三方平台提供的资源进行有针对性的学习与模拟测试。 阅读建议:建议考生根据自身情况,先从编程类真题入手,逐步掌握常见算法与数据结构的应用,同时结合客观题与单片机专项进行综合复习。在备考过程中,充分利用官方题库和第三方平台提供的资源,进行限时模拟测试,找出薄弱环节并加以改进。

三十度角阳光的问候
评论
收藏 已收藏
分享
返回顶部
执 梗
执 梗 优质创作者: 算法与数据结构技术领域 优质创作者: 算法与数据结构技术领域
高校算法学习社区 51,729 成员 6,062 内容