12.26 CW 模拟赛 T1. 平均

news/2024/12/26 15:19:07/文章来源:https://www.cnblogs.com/YzaCsp/p/18632934

思路

首先你发现假设当前的平均数是 \(a\) , 其中 \(\lceil a \rceil = k\) , 那么你势必要选上所有 \(< k\) 的数来拉低平均数, 然后贪心的从小到大选 \(\geq k\) 的数来提高贡献

如果想不到也可以这样想, 对于一个确定的平均数, 一定要尽可能的让比平均数小的数更多, 才能更多的腾出空间给大于平均数的数

显然的, 这样子搞完之后, 每次选择的一定是一段排序后数列的前缀, 你对前缀做一点二分操作就可以计算出答案了


以下是赛时想歪之后的思路, 我看看还能不能救回来

赛时发现, 最优解可以看做把排序后的数列 (以下简称数列) 分成两段, 分别取两端的前缀组合就可以找到一个不劣的答案

其实容易发现, 每次假设把 \(a\) 数列分成两部分 \(u, v\) , 那么显然的, 如果你对于一个确定的 \(v\) 进行分析, \(u\) 一定是选完 \(v\) 之前的所有最优, 也就是说 \(u, v\) 显然连在了一起拼成了前缀

代码

没有难度, 脑子没转过来

#include <bits/stdc++.h>
// #define FILE_IO
#define int long long
const int MAXN = 1e6 + 20;int n;
int a[MAXN];class Brute_Force
{
private:int Ans = 0;public:void solve() {std::sort(a + 1, a + n + 1);for (int p = n; p >= 1; p--) {int rsum = 0;for (int r = p; r <= n; r++) {rsum += a[r];int lsum = 0; bool flag = false;for (int l = 1; l < p; l++) {lsum += a[l];if ((r - p + 1ll + l) * a[p] > lsum + rsum) {Ans = std::max(Ans, r - p + 1ll);}}}}printf("%lld", Ans);}
} BF;class Greedy
{
private:int binsearch(int l, int r, int sum, int num) {int Left = l, Right = r + 1;while (Left < Right) {int Mid = (Left + Right) >> 1;if (a[Mid] * num > sum) Right = Mid;else Left = Mid + 1;}return Left;}public:void solve() {std::sort(a + 1, a + n + 1);int sum = 0;int ans = 0;for (int i = 1; i <= n; i++) {sum += a[i];int res = binsearch(1, i, sum, i);ans = std::max(ans, i - res + 1);}printf("%lld", ans);}
} GR;signed main()
{
#ifdef FILE_IOfreopen("average5.in", "r", stdin);freopen("average5.out", "w", stdout);
#endifscanf("%lld", &n);for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);// if (n <= 500) BF.solve();GR.solve();return 0;
}

总结

平均数很好的性质, 贪心策略的应用

如果赛时思维想糊了考虑化枚举为单点的正确性, 对于简单题来说一般是这样的

最好是因为难受才没有做出来, 说不定就是菜

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859323.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot项目启动和部署: 自带tomcat

springboot项目启动: springboot内部嵌入了tomcat,在spring-boot-starter-web里可以找到,在这里插入图片描述这样在研发过程中就不在需要tomcat服务器,并且springboot项目在打完jar之后,可以直接启动也不需要另外的本地tomcat。也就是说拿到springboot项目jar之后,完全可…

python脚本定期删除EFK日志索引

使用pyhon脚本删除50天前的日志pip install Elasticsearch pip install datetime !/usr/bin/python3 from elasticsearch import Elasticsearch from datetime import datetime, timedelta Elasticsearch服务器地址,默认本地为localhost,可按需替换 es_host = "localhos…

私有化部署视频平台EasyCVR小知识:如何测试网络设置对RTSP流效率的影响?

在现代视频监控系统中,RTSP流的效率和在Web端的播放能力是衡量系统性能的关键指标。本文将探讨如何测试网络设置对RTSP流效率的影响,并介绍如何使用EasyCVR平台解决RTSP流在Web端的播放问题,以确保视频监控系统的高效运行和用户体验的优化。一、如何测试网络设置对RTSP流效率…

HTML画布canvas绘制图形,解决拖影问题

在使用HTMl画面 canvas 绘制矩形,圆等图形时,总是出现拖影。 解决这个问题有很多中方法: 方法一:鼠标移动过程中中不画上去,在释放鼠标的时候绘制上去,这样就看不到拖影,但是看不到绘制过程 方法二:在鼠标移动的时候,清除上一次绘制的矩形,然后在画,这样就没有拖影了…

【消息中间件】稳定性建设之SLA浅述

最近参与了部门消息服务的架构升级和稳定性保障,以此文简单总结下当建设和负责维护中间件稳定性时必备的SLA基础知识,一并调研了目前国内外商业化的云消息中间件产品SLA相关情况,最后附上个人在维护消息中间件和支持不同业务场景时的一些通用性粗浅思考,有不恰当的地方欢迎…

以旧换新政策中的数字化协作路径探索

政府发布的《汽车以旧换新补贴政策》为促进汽车消费、优化车辆结构提供了强有力的支持。然而,这一政策的落地实施,涉及多方协同,包括政策文件解读、销售渠道配合、消费者补贴申请等复杂流程。为了应对这些流程的高效管理,企业需要借助数字化协同工具,提升内部及外部的工作…

DataGrip2024.3完整版的安装教程(附激活,常见问题处理)

卸载老版本 DataGrip 首先,如果小伙伴的电脑上有安装老版本的DataGrip , 需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可): TIP:如果你之前使用过本站提供的 激活到 2025 年版本脚本,需要执行对应卸载脚本 /适用2024版本/JetBrains 2023 最新全家桶/jetbra…

HDFS操作02(遇到的问题和解决)

编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。查看Java帮助手册或其它资料,用“java.net.URL”和“org.a…

3083. 字符串及其反转中是否存在同一子字符串

给你一个字符串 s ,请你判断字符串 s 是否存在一个长度为 2 的子字符串,在其反转后的字符串中也出现。 如果存在这样的子字符串,返回 true;如果不存在,返回 false 。 示例 1: 输入:s = "leetcode" 输出:true 解释:子字符串 "ee" 的长度为 2,它也…

19款顶级测试用例管理工具全面解析

在当今数字化飞速发展的时代,软件测试的重要性日益凸显,而一款优秀的测试用例管理工具能够极大地提升测试效率与质量,帮助团队更高效地发现软件中的问题,确保产品的稳定性和可靠性。本文将为您全面解析19款顶级的测试用例管理工具,带您深入了解它们的特点与优势,助您在众…

OCR实践-Table-Transformer

前言 书接上文OCR实践—PaddleOCRTable-Transformer 与 PubTables-1M table-transformer,来自微软,基于Detr,在PubTables1M 数据集上进行训练,模型是在提出数据集同时的工作, paper PubTables-1M: Towards comprehensive table extraction from unstructured documents,发…