当前位置: 首页 > news >正文

【补题】Codeforces Round 664 (Div. 1) A. Boboniu Chats with Du

题意:给出n,d,m三个值,分别代表,有多少个值ai,使用超过m的ai,需要禁言d天,如果不足也能使用,m代表区分点,问能得到最大的值有多少。

思路:        CF1394A Boboniu Chats with Du - 洛谷

1.很容易想到的一个点就是能用大值越多越好,同时因为天数不足也是可以选取的,所以大值在时间轴上的顺序,越靠后越好。

2.最简单的答案就是我就选小值,也不用讨论禁言了,然后考虑开始放入大值,那么一定是放在当前时间轴的最后,因为区分点的缘故,先分开值之间的区别,对于两堆的贪心,均是能用越大的越好。所以考虑枚举,每添加一个大值,优先使用剩下不用的大值去抵消天数,如果不够在用小值。
利用前缀和O(1)返回剩余小值的贡献,O(n)累加枚举大值即可

代码:

#include <bits/stdc++.h>
#define int long long
#define int128 __int128
#define IOS                                                                                                            \std::ios::sync_with_stdio(0);                                                                                      \std::cin.tie(0);                                                                                                   \std::cout.tie(0);
const int N = 1e6 + 10;
const int INF = 1e18;
const int MOD = 998244353;void solve() {int n, d, m;std::cin >> n >> d >> m;std::vector<int> sm;std::vector<int> bi;for(int i = 0; i < n; i++) {int x;std::cin >> x;if(x <= m) {sm.push_back(x);} else {bi.push_back(x);}}sort(sm.begin(), sm.end(), std::greater());sm.insert(sm.begin(), 0);sort(bi.begin(), bi.end(), std::greater());int sum = 0;for(int i = 1; i < sm.size(); i++) {sm[i] = sm[i - 1] + sm[i];}int res = sm[sm.size() - 1];for(int i = 0; i < bi.size() && i * d + (i + 1) <= n; i++) {sum += bi[i];int mini = std::min(n - (i * d + (i + 1)), (int)sm.size() - 1);// std::cout << sm[mini] << " " << sum << '\n';res = std::max(res, sum + sm[mini]);// std::cout << sm[sm.size() - 1 - i * d] << " " << sum << "\n";}std::cout << res << '\n';
}signed main() {IOS;int t = 1;// std::cin >> t;while(t--) {solve();}
}

相关文章:

  • 蓝桥杯赛后总结
  • AI时代生产工厂制造业数字化转型培训师培训讲师唐兴通教授专家顾问清华大学讲授AI库存降本增效智能制造供应链生产调度智能管理设备健康
  • 微波功率器件的发展
  • 部署若依项目到服务器遇到的问题
  • 要搞一个PHP的工程,顺到手科普下VS Code
  • openGauss新特性 | HTAP新特性介绍
  • 西门子PLC S7-1200 电动机的软启动控制
  • DeepSeek-V3 解读,第一部分:理解 Multi-Head Latent Attention
  • RHCSA Linux 系统 文件系统权限
  • 关于我的算法文章学习路线
  • Go与Cpp的本质区别
  • 量子机器学习中的GPU加速实践:基于CUDA Quantum的混合编程模型探索
  • Java对集合进行操作,赋值新字段
  • k8s术语之Replication Controller
  • MySQL中ROW_NUMBER() OVER的用法以及使用场景
  • CentOS网络之network和NetworkManager深度解析
  • windows系统常用快捷键(CMD常用命令,DOS常用命令)
  • PostgreSQL数据库操作基本命令
  • windows 下 oracle 数据库的备份与还原
  • 多线程系列一:认识线程
  • 李公明︱一周书记:数字文化的乌托邦精神与……算法时代的生存指南
  • 讲座|为什么要不断地翻译叶芝的诗?它们为什么值得细读?
  • 关于新冠疫情防控与病毒溯源的中方行动和立场
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 交通运输部:预计今年五一假期全社会跨区域人员流动量将再创新高
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标