首页 > 其他分享 >牛客题解 装进肚子

牛客题解 装进肚子

时间:2022-09-24 00:22:21浏览次数:86  
标签:巧克力 int 题解 吃掉 甜度 牛客 lst 装进 白天

链接:https://ac.nowcoder.com/acm/problem/14721
来源:牛客网

题解

作者 岛田小雅

这道题刚拿到手,就感觉是个很简单(事实证明并不是很简单)的贪心。虽然我不是很会判断贪心的适用范围,但是我决定相信自己的直觉。

我的第一想法是:分别把巧克力按照早上和晚上的甜度从大到小排列,得到一个数组 \(a\)(白天的巧克力甜度序列)和一个数组 \(b\)(晚上的甜度序列),然后在早上和晚上的巧克力都没吃满的时候,可以从两组的巧克力的最大值里面找最大的那个吃掉,同时在那颗巧克力上标记已经吃掉了。吃掉的巧克力在下次挑选时不可以再被选中。一旦早上的巧克力或者晚上的巧克力吃满了,剩下的就全给没吃满的时刻吃掉。实现使用优先队列模拟。

然后得到一个样例通过率 0% 的 WA。

出了什么问题呢?我突然意识到,如果在取走一个时刻甜度为当前最高的巧克力时,那个巧克力同时也是另一个时刻剩下巧克力里不可取代的较大值,那这个方案就会挂。

比如这个样例:

5 2
6 5 5 6 1
5 0 3 0 0

如果我们按照刚才的策略去选择,得到的方案是白天吃掉编号为 \(1\) 和 \(4\) 的巧克力,晚上吃 \(2\),\(3\) 和 \(5\),甜度值总和是 \(15\)。但其实我们白天吃 \(2\),\(4\),晚上吃 \(1\),\(2\) 和 \(5\) 得到的甜度值是 \(19\),比刚才的方案更优。

也不知道出题人是谁居然每个点都有这种数据(样例通过率 0% 的怨念)。当然,不排除还有别的地方会逻辑错误(但是我看不出来)

因为懒得去想怎么修改,第二次尝试我直接换了策略。我们决定一块巧克力在什么时候吃,应该取决于这块巧克力在白天和夜晚跟其它巧克力甜度值的差值大小。如果白天的差值比夜晚大,那在白天吃更优,否则应该在晚上吃。

这样我们就可以直接用一个很简单的排序策略来计算出正确的结果啦。

AC 代码

作者 岛田小雅
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5+1;
int n, k;
pair<int,int> lst[N];
long long ans;

bool cmp(pair<int,int> x, pair<int,int> y)
{
    return x.first-y.first > x.second-y.second;
}

int main()
{
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n >> k;
    for(int i = 1; i <= n; i++) cin >> lst[i].first;
    for(int i = 1; i <= n; i++) cin >> lst[i].second;
    sort(lst+1,lst+1+n,cmp);
    for(int i = 1; i <= n; i++)
    {
        if(i<=k) ans += lst[i].first;
        else ans += lst[i].second;
    }
    cout << ans;
    return 0;
}

标签:巧克力,int,题解,吃掉,甜度,牛客,lst,装进,白天
From: https://www.cnblogs.com/CasseShimada/p/16724743.html

相关文章

  • pycharm打字卡顿问题解决
    问题描述:我在pycharm中使用的远程服务器中的环境,工程也是本机映射到远程环境中,在某次断网以后,再次使用就变得非常卡,具体现象就是我码字要等,整个pycharm就无法点击,过了5秒以......
  • P1347 排序 题解
    题干交了8次,下载了3个测点.....首先这个题,很容易想到用拓扑如果有“X$<$Y”,就建立一条从X到Y的有向边要考虑到,如果排序成立,必须满足入度为0的点只有一个并且出度为0的......
  • P5089 [eJOI2018] 元素周期表 题解
    \(Preface\)主要是想刷点咕值然后就写了一写。。。顺便扔到博客园这边。题解题目传送门这道题嘛..主要还是找性质推规律。拿到题,第一眼:噢噢爆搜啊。第二眼:噢噢贪心啊......
  • P4484题解
    很神奇的状态。。。。。。很难想象这是一个人能在考场上想到的状态。对于一个排列\(p\),设\(f_i\)表示以\(p_i\)结尾的LIS的长度。考虑排列计数的套路令所有元素......
  • Vue中使用benz-amr-recorder插件实现播放amr音频文件以及在线url跨域问题解决
    场景需要做一个Android端和Web端的聊天室,Android端的录音音频文件为.amr格式,除了通过后台server端转码之后,是否可以通过插件在前端直接播放amr的音频文件。benz-amr-rec......
  • 【NEERC2011】【GYM100085F】Flights 题解
    【NEERC2011】【GYM100085F】Flights题意给定\(n\)个抛物线,保证开口向下且与\(x\)轴的两个交点都在\(x\)轴正半轴或原点。\(m\)次询问,每次询问给定四个数\(L,R,......
  • 【题解】Race
    今天教练说让刷题,我去刷了。刷到这道题,挺好的。\(n\)个同学打了\(2^{m}\)次比赛,同学\(j\)第\(i\)次比赛的成绩是\(a_j\operatorname{xor}i\),每次获得的积分......
  • 牛客网-SQL专项训练21
    ①Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入如下记录:('1014','张三','2002-01-06','男');SQL错误的是(B)? 解析:普通插入(全字段):INSERTINT......
  • 题解 P7870 「Wdoi-4」兔已着陆
    不用真的模拟一个个的蛋糕。直接将一个区间压入栈中即可。取出来时,注意将断的区间一分为二重新塞入。#include<bits/stdc++.h>usingnamespacestd;#defineN1000010......
  • CF1430G 题解
    传送门题意给定一个有向无环图,每条边有权重\(w_i\),给每个点分配权值\(a_i\),使每个点的权值大于其所有出点。设每条边的权值为\(a_{x_i}-a_{b_i}\)。输出一种分配方案,......