首页 > 其他分享 >Codeforces 1974G Money Buys Less Happiness Now

Codeforces 1974G Money Buys Less Happiness Now

时间:2024-05-21 19:08:38浏览次数:22  
标签:cnt Less int Money scanf Codeforces tot 贪心

考虑到有一种贪心的思路就是能选就选。
显然这是错的,因为可能存在后面更优的情况,即当 \(c_i > c_j(i < j)\) 时,选 \(j\) 肯定比选 \(i\) 更优,因为后面剩下的更多且中间也留下了一些。

于是考虑反悔贪心。
还是一样的,如果能选就一定选上。
否则来说,考虑对于当前已经选了的中的最大值,如果当前值比最大值小,那么将其替换掉即可。

但是似乎还漏了一部分,就是中间留下的那一部分,但能证明这部分肯定不优。
假设当前是第 \(i\) 个,替换掉的是第 \(j(j < i, c_i < c_j)\) 个。
对于当前已经选的数的总和 \(sum\),有 \(sum + c_i > ix\)。
同时对于 \(k\in (j, i)\) 且没被选的第 \(k\) 个,根据贪心策略肯定有 \(c_k > c_j\),那么 \(k\) 肯定选不了。
所以不会出现这种情况。

时间复杂度 \(\mathcal{O}(m\log m)\)。

#include<bits/stdc++.h>
inline void Main() {
   int m, x;
   scanf("%d%d", &m, &x);
   int tot = 0, cnt = 0;
   std::priority_queue<int> Q;
   for (int v; m--; tot += x) {
      scanf("%d", &v);
      if (tot >= v)
         tot -= v, cnt++, Q.push(v);
      else if (! Q.empty() && v < Q.top())
         tot += Q.top() - v, Q.pop(), Q.push(v);
   }
   printf("%d\n", cnt);
}
int main() {
   int T;
   scanf("%d", &T);
   while (T--) Main();
   return 0;
}

标签:cnt,Less,int,Money,scanf,Codeforces,tot,贪心
From: https://www.cnblogs.com/rizynvu/p/18204756

相关文章

  • 错误: 找不到或无法加载主类 XXX类 || jmap -histo:live 2345 | less
    今天在学习jvm的时候,想要通过jmap-histo:live20368|less命令查看堆中存活对象信息。但是在windows系统中貌似好像不支持这个命令 于是我将自己的程序上传到了Linux系统中,但是经过编译完了之后,运行该class文件的时候,提示:错误:找不到或无法加载主类XXX类。这个错误的原......
  • Codeforces Round 946 (Div. 3)
    CodeforcesRound946(Div.3)总结:赛时状态很好,做出了感觉平常会赛时寄掉但是赛后补题的E,但是也因此花费时间太多,没时间去做更简单的F和G,赛后G用时十分钟AC,F码的有点麻烦,用时40分钟左右,感觉三个小时能AK?A.PhoneDesktop题意:给定3*5的平面,有a个1*1的格子和b个2*2的格子,求完全......
  • Kmesh进入CNCF云原生全景图,实现网格治理sidecarless化
    本文分享自华为云社区《Kmesh进入CNCF云原生全景图》 ,作者:云容器大未来。近日,Kmesh 正式进入CNCF云原生全景图,位于ServiceMesh 类别下。CNCFLandscape在云原生实践过程中的每个环节帮助用户了解有哪些具体的软件和产品选择,Kmesh进入CNCFLandscape,成为了CNCF构建云......
  • Codeforces Round 945 (Div. 2) (A - E)
    A每一轮对总分的贡献都是\(2\),如果\(p_1+p_2+p_3\)为奇数则无解。\(p_1+p_2\lep_3\),最多\(p_1+p_2\)轮。\(p_1+p_2>p_3\),可以\(1,2\)轮流将\(3\)耗完,然后互相匹配,最多\(\dfrac{p_1+p_2+p_3}{2}\)。B如何判断一个\(k_0\)是否符合条件?处......
  • Codeforces 401B Sereja and Contests 题解
    题目简述Sereja是一名程序员,他喜欢参加Codesorfes比赛。不过,乌兹兰的网络连接不太好,所以Sereja有时会跳过比赛。Codesorfes有两种类型的比赛,分为Div1和Div2。Div1和Div2这两轮可以同时进行(Div1轮不能在没有Div2的情况下进行)。每一轮都有一个唯一的标识符,各轮按......
  • Codeforces Round 944 (Div. 4)
    CodeforcesRound944(Div.4)需要一些trick的一场H:2-sat的板子,已经计入2-sat专题,此处不再详细描述。题目用矩阵包装和博弈包装,我们需要慢慢读题,分析样例,找到问题的关键点。G:题意:给定一个数组,数组中任何两个数异或<4的数对可以交换位置,可以交换无限次,求能够形成的字典序最......
  • Codeforces Round 945 (Div. 2) A-D
    A.ChessForThree模拟。首先可以发现每一次对局三人的得分总和加\(2\),所以若干次对局后得分总和也一定是\(2\)的倍数,然后为了使和棋数量尽可能多,一直让得分最高的两人和棋且得分数各减\(1\)直到无法做出和棋为止。#include<bits/stdc++.h>usingnamespacestd;#def......
  • Codeforces Round 945 (Div. 2)
    A-ChessForThree因为序列满足a<=b<=c的情况显然通过得分可以观察出得分总和必定为偶数否则不成立求的是最大平局数那么直接假设全部都是平局这时候发现如果c过大会导致后面的局数不是平局那么只用把c>a+b的情况取出而此时平均数为a+b点击查看代码#include<bits/stdc+......
  • Codeforces 769B News About Credit 题解
    题目简述波利卡普在由$n$名学生(包括他自己)组成的小组中学习,编号为$1$到$n$,波利卡普的编号始终是$1$。他们都在社交网络上注册,每个学生都有一个值$a_i$,表示第$i$名学生每天能发送的最大信息数。清晨,波利卡普知道了一个重要消息,他认为有必要通过私人消息紧急通知所有组员......
  • Less靶场SQL注入通关宝典
    这篇文章是一个sqil-labs靶场的保姆级教学,从安装、配置、场景通关都有详细的介绍,其中场景通关是我们这篇文章的重点。首先我们要了解sqli-labs靶场是什么?sqli-labs靶场是刚刚接触SQL注入的新手,了解SQL注入、练习SQL注入的一个很方便,很实用的一个靶场,配置简单,操作简单......