news 2026/5/28 7:57:32

ACM下学期第五次周赛

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACM下学期第五次周赛

C题拼数字

题目意思是给定一组数字,将这些数字拼到一起,然后组成一个最大的数字。

题目不是很难,只需要将元素组先排序再去从大到小依次输出即可,但是有一种特殊情况需额外考虑,如90和9这组数据,如果按照上面所说去拼,发现拼出来的909并没有990大,所以说只排序是不行的,所以我们需要自定义排序,去判断a,b拼成的数字大还是b,a拼成的数字大。还有一种特殊情况就是全是零,这种情况我们只需要输出0即可。(数据中没有考虑这个情况,故以下代码可以过)

#include <bits/stdc++.h> using namespace std; bool compare(const string &a, const string &b) { return a + b > b + a; } int main() { int n; cin >> n; vector<string> nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; } sort(nums.begin(), nums.end(), compare); for(int i=0;i<n;i++) cout<<nums[i]; return 0; }

D题加和减

题目描述为给定一个数组,小红可以进行以下的操作:

每次操作可以让某个数加 1 或者某个数减 1 。
小红最多能进行 k 次操作。

要去小红操作结束后,该数组出现次数最多的元素次数尽可能多。

因为数可以随即加减,并无区间的限制,所以我们可以先进行排序,排完序之后我们就要模拟题目中的操作了,要如何确定统一变成某个数且成本控制在K之内呢?我们应该可以联想到,一个有序区间内将所有数变成中位数的代价是最小的,所以我们可以用双指针去确定区间,然后再定义中位数,将该区间内的所有数据,都变成中位数看看是需要多少次,并且使数量最多。这里用前缀和的原因是在计算区间内所有数据都变成中位数的时候,需要不断求和,所以如果不提前预处理求和,每次在循环内进行求和会导致时间超限。

计算中位数左边需要的次数公式为:a[mid] * (mid - left) - (pref[mid] - pref[left]))

mid-left 是计算中位数左边数据的个数;

计算中位数右边需要的次数公式为:(pref[right + 1] - pref[mid + 1]) - a[mid] * (right - mid)

同理,right-mid是计算 中位数右边数据的个数;

最后max去不断刷新最大个数;

最终输出ans;

#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); int n; ll k; cin >> n >> k; vector<ll> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; sort(a.begin(), a.end()); vector<ll> pref(n + 1, 0); for (int i = 0; i < n; i++) pref[i + 1] = pref[i] + a[i]; int ans = 0; int left = 0; for (int right = 0; right < n; ++right) { while (left <= right) { int mid = (left + right) / 2; ll cost = (a[mid] * (mid - left) - (pref[mid] - pref[left])) + ((pref[right + 1] - pref[mid + 1]) - a[mid] * (right - mid)); if (cost <= k) break; ++left; } ans = max(ans, right - left + 1); } cout << ans << "\n"; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 7:57:14

MySQL Community Server 9.7.0 LTS 下载|Ubuntu 24.04 DEB|国内网盘

MySQL Community Server 9.7.0 LTS 下载&#xff08;Ubuntu 24.04 amd64 DEB&#xff0c;国内网盘优先&#xff09;国内访问 MySQL/Oracle 官方仓库有时较慢&#xff0c;建议优先使用下表第二列的【国内网盘下载】。本次整理的是 MySQL 官方 APT 仓库 mysql-9.7-lts 组件中的 U…

作者头像 李华
网站建设 2026/5/22 1:14:07

Spark 从入门到部署:核心模块解析与 Yarn 模式实战指南

Spark 从入门到部署&#xff1a;核心模块解析与 Yarn 模式实战指南 文章目录Spark 从入门到部署&#xff1a;核心模块解析与 Yarn 模式实战指南一、Spark核心模块二、安装模式1、本地模式2、Standalone模式3、Yarn模式视频部署教程一、Spark核心模块 摘要&#xff1a;本文系统介…

作者头像 李华
网站建设 2026/5/22 1:13:11

指控系统中态势感知与OODA双螺旋智能系统

在指控系统&#xff08;C2&#xff09;中&#xff0c;构建“态势感知”与“OODA双螺旋”智能系统&#xff0c;核心在于将客观的态势感知计算与主观的OODA决策循环深度融合&#xff0c;形成一个“感知-决策”相互驱动、实时耦合的闭环架构。简单来说&#xff0c;态势感知负责提供…

作者头像 李华
网站建设 2026/5/22 1:13:06

Linux IO栈:页缓存、块层与IO调度深度解析

Linux I/O 全栈&#xff1a;从 write() 到磁盘磁头——一个字节的万里长征 你调用 write(fd, buf, 4096) 只花了 50 微秒。这 50 微秒里发生了什么&#xff1f;这篇文章追踪一个字节的完整旅程——从用户态系统调用到磁盘控制器&#xff0c;经过 VFS、Page Cache、Block Layer、…

作者头像 李华
网站建设 2026/5/22 1:13:03

Web 安全入门实战教程|Web 基础精讲(第一篇)

『Web安全』入门级实战教程——Web基础&#xff08;一&#xff09; 这是一个为开发、运维及安全从业者构建的&#xff1a; 系统的拆解Web安全的关键领域。 内容涵盖 “原理深入-实战驱动-体系构建” 为你提供一条清晰的进阶路径。 使你在面任何新型漏洞时&#xff0c;迅速定…

作者头像 李华