MX-J24 题解(T1 - T4) - 指南

news/2025/10/2 13:18:18/文章来源:https://www.cnblogs.com/wzzkaifa/p/19123495

T1: P14056 【MX-X21-T1】[IAMOI R5] 七休制

题目描述

你有三种类型的日子:

  • 加训:疲劳度 +1+1+1
  • 休息:疲劳度不变。
  • 颓废:疲劳度 −1-11

最开始的疲劳度是 000,总共有 a+b+ca + b + ca+b+c 天,需要恰好有 aaa 天加训,bbb 天休息,ccc 天颓废。你可以随意安排顺序,求有多少天的疲劳度为 000

数据范围0≤a,b,c≤1000 \le a, b, c \le 1000a,b,c100

思路

算法标签:贪心

按照贪心的角度来讲,我们先休息 bbb 天(对答案的贡献为 bbb)。然后让加训和颓废交替进行(对答案的贡献为 min⁡(a,c)\min(a, c)min(a,c))。最终答案为 b+min⁡(a,c)b + \min(a, c)b+min(a,c)

Code

#include <bits/stdc++.h>using namespace std;using ll = long long;using ull = unsigned long long;using db = double;using pii = pair<int, int>;using pq = priority_queue<int, vector<int>>;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int a, b, c;cin >> a >> b >> c;cout << b + min(a, c) << "\n";return 0;}

T2: P14057 【MX-X21-T2】[IAMOI R5] 空气蛹

题目描述

nnn 个杯子,编号为 111nnn,每个的容量都为 mmm。现在,第 iii 个杯子里水的体积为 aia_iai

你可以进行若干次操作,每次可以选择两个不同的杯子 iiijjj ,并把 iii 中的所有水倒入 jjj 中。如果操作后 jjj 中的水的体积大于 mmm,那么 jjj 中的水的体积会溢出到只剩 mmm

完成这些操作后,你需要保证杯中水的体积单调不减,且留下水的总体积尽量大。求这个最大值。

数据范围1≤T≤101 \le T \le 101T101≤n≤1051 \le n \le 10^51n1051≤m≤1091 \le m \le 10^91m1090≤ai≤m0 \le a_i \le m0aim

思路

算法标签:贪心

首先如果这些杯子已经按照升序排序排好了,那么答案显然为 ∑i=1nai\sum\limits_{i = 1}^{n}{a_i}i=1nai

否则,我们至少需要合并一次。由于合并一次就会产生一个空杯子,这样这个杯子就可以作为中转杯,让其他所有的水杯升序排序且不浪费。

那么问题就变成了该让那两个杯子合并呢?贪心来讲显然是最小的两个杯子,因为这样才可以让浪费尽可能的小。

Code

#include <bits/stdc++.h>using namespace std;using ll = long long;using ull = unsigned long long;using db = double;using pii = pair<int, int>;const int N = (int)1e5 + 5;int n;ll m, a[N], sum = 0;void sol() {cin >> n >> m;bool flag = true;sum = 0;for (int i = 1; i <= n; i++) {cin >> a[i];sum += a[i];if (a[i] < a[i - 1]) flag = false;}if (!flag) {sort(a + 1, a + n + 1);cout << sum - a[1] - a[2] + min(a[1] + a[2], m) << "\n";} else cout << sum << "\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T; cin >> T;while (T--) sol();return 0;}

T3: P14058 【MX-X21-T3】[IAMOI R5] 两个人的演唱会

题目描述

给定一个长度为 nnn 的,由正整数组成的环 a1,a2,⋯,ana_1, a_2, \cdots, a_na1,a2,,an,你需要将这个环切成若干段,是的所有段的内极差都小于等于 mmm,求分成的最小段数。

数据范围1≤T≤5⋅1061 \le T \le 5 \cdot 10^61T51061≤n1 \le n1n∑n≤3⋅107\sum{n} \le 3 \cdot 10^7n31071≤m,ai≤1091 \le m, a_i \le 10^91m,ai109

思路

算法标签:贪心

先考虑是一条链的情况,那么直接贪心找到最少次数(subtask 7)。

如果是环,我们可以直接暴力枚举从哪里破环,然后进行贪心,这样的时间复杂度是 O(n2)O(n^2)O(n2)

考虑优化,先破环成链,先特判整个环的极差 ≤m\le mm 的情况(答案为 111,然后进行贪心。假设贪心后的最优答案为 ansansans,那么我们的答案就是 ans2\frac{ans}{2}2ans,原因如下:

  • 假设 ∣a1−an∣>m|a_1 - a_n| > ma1an>m 时,就跟链的情况一样,所以答案为 ans2\frac{ans}{2}2ans
  • 假设 ∣a1−an∣≤m|a_1 - a_n| \le ma1anm 时,a1a_1a1ana_nan 必定会合并成为一个段。答案为 ⌊ans2⌋\lfloor\frac{ans}{2}\rfloor2ans,由于是整数,所以就是 ans2\frac{ans}{2}2ans

Code

#include <bits/stdc++.h>using namespace std;using ll = long long;using ull = unsigned long long;using db = double;using pii = pair<int, int>;const int N = (int)3e7 + 5;int n, m;int a[N * 2];void init() {}void sol() {cin >> n >> m;for (int i = 1; i <= n; i++) { // 注意:破环成链cin >> a[i];a[i + n] = a[i];}// 贪心求出最小的答案int maxn = a[1], minn = a[1], ans = 1;for (int i = 2; i <= 2 * n; i++) {maxn = max(maxn, a[i]);minn = min(minn, a[i]);if (maxn - minn > m) {ans++;maxn = a[i];minn = a[i];}}ans /= 2;cout << (ans == 0 ? 1 : ans) << "\n"; // 这里包含了一个特判:环的极差 <= m}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T; cin >> T;while (T--) sol();return 0;}

T4: P14059 【MX-X21-T4】[IAMOI R5] 使一颗心免于哀伤

题目描述

一个黑白棋子组成的环,双方轮流删除一段连续的同色棋子(知更鸟只能删黑棋,星期日只能删白棋),删后仍成环。如果只剩一种颜色,游戏结束:若全白则知更鸟胜,若全黑则星期日胜。

思路

算法标签:分类讨论

首先特判两种显然的情况:

  1. 环上只有一种颜色,那么答案显然一定(若是白色则知更鸟胜,若是黑色则星期日胜)。
  2. 换上只有两段(两段色块),那么答案一定是先手必胜(手画画就知道了,先手直接全拿完自己的那一段就胜了)。

因为两个人都是聪明的,所以他们不希望出现我拿完一段棋子就只剩下一种颜色的棋子了,所以我们尽量少拿,也就是每次拿一个。这样就很容易想到判断谁必胜的方法:两个人能拿的棋子更多者,为必胜者。

注意:需要先特判那两种情况

Code

#include <bits/stdc++.h>using namespace std;using ll = long long;using ull = unsigned long long;using db = double;using pii = pair<int, int>;const int N = (int)1e5 + 5;int n;string s;void init() {}void sol() {cin >> n;cin >> s;s = '_' + s;// 判断只有一种颜色的情况bool flag1 = 0, flag2 = 0;for (int i = 1; i <= n; i++) {if (s[i] == '1') flag1 = true;else flag2 = true;}if ((flag1 & flag2) == 0) { // 如果只有一种颜色cout << (!flag1 ? "Robin\n" : "Sunday\n");return ;}// 数出有多少个色块(注意环)int cnt = 1;for (int i = 1; i < n; i++) {if (s[i] != s[i + 1]) cnt++;}if (cnt & 1) cnt--; // 首尾颜色相同if (cnt == 2) { // 如果只有两段,那么先手必胜(即 Robin)cout << "Robin\n";return ;}// 计算 cnt > 2 的情况int sum1 = 0, sum2 = 0;for (int i = 1; i <= n; i++) {if (s[i] == '1') sum1++;else sum2++;}cout << (sum1 > sum2 ? "Robin\n" : "Sunday\n");}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T; cin >> T;while (T--) sol();return 0;}

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

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

相关文章

深入解析:ROS2学习研究版本推荐:Jazzy Jalisco(LTS长期支持版)AI版本251001

深入解析:ROS2学习研究版本推荐:Jazzy Jalisco(LTS长期支持版)AI版本2510012025-10-02 13:06 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

详细介绍:c++ 之多态虚函数表

详细介绍:c++ 之多态虚函数表pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

微信授权登录网站退出怎么做网站安全检测入口

[LeetCode] 485.最大连续 1 的个数(Java) 1.题目描述 力扣传送门 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a;输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &…

建材做哪些网站买购网

目录 1&#xff1a;什么是序列化、反序列化&#xff1f; 2&#xff1a;序列化的用途&#xff1f; 3&#xff1a;序列化的n种方式 1&#xff1a;什么是序列化、反序列化&#xff1f; 把对象转换为字节序列的过程称为对象的序列化把字节序列转换为对象的过程中称为对象的反序列…

2025球墨铸铁管厂家TOP企业品牌推荐排行榜,k9球墨铸铁管,c25球墨铸铁管,c30球墨铸铁管,c级国标离心球墨铸铁管,c级供水球墨铸铁管,dn900球墨铸铁管公司推荐!

在当前城市基础设施建设与市政工程快速推进的背景下,球墨铸铁管作为供水、排水、消防等领域的关键管材,其市场需求持续增长。然而,行业发展也面临诸多问题,一方面,部分生产厂家为降低成本,在原材料选用和生产工艺…

10/2

今日学习了Java和英语,背诵了单词,明日继续

使用 VictoriaLogs 存储和查询服务器日志

欢迎访问我的个人小站 莹的网络日志 ,不定时更新文章和技术博客~目前为止,我查询服务器日志的方式都是小作坊式做法,先是连进服务器找到日志文件,要么使用 vim 打开文件搜索要么就是用 grep。当前我只有一个服务器…

详细介绍:Git 基础 - 查看提交历史

详细介绍:Git 基础 - 查看提交历史pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

语音合成技术

语音合成技术本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,如有侵权请与博主联系。 如果未特殊标注则为原创…

求职网站网页模板下载网站模板绑定域名

来源&#xff1a;卫星界据工业和信息化部官网10月9日消息&#xff0c;依据《工业和信息化部重点实验室管理暂行办法》&#xff08;工信部科〔2014〕515号&#xff09;&#xff0c;经评审和公示&#xff0c;工业和信息化部公布2019年工业和信息化部重点实验室名单。根据文件&…

PowerShell 提供程序和驱动器(七)

PowerShell 提供程序和驱动器目录PowerShell 提供程序和 PowerShell 驱动器PowerShell 提供程序查看提供程序的帮助文件使用PowerShell 驱动器处理 PowerShell 驱动器位置管理文件系统管理注册表获取注册表项获取注册表…

网站建设 业务员提成岳阳seo

命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 命令模式主要包含以下几个角色&…

用织梦做的学校网站建设工程教育网官网学员登录

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】180.基于距离变换的分水岭算法 【youcans 的 OpenCV 例程200篇】181.基于 Sobel 梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】182.基于形态学梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】183.基…

400选号网站源码wordpress聚合广告平台

让我们定义dn​为&#xff1a;dn​pn1​−pn​&#xff0c;其中pi​是第i个素数。显然有d1​1&#xff0c;且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<105)&#xff0c;请计算不超过N的满足猜想的素数对的个数。…

2025热熔胶厂家 TOP 企业品牌推荐排行榜,书刊装订,珍珠棉,纸箱包装,环保,书本,试卷,票据,平摊,胶版纸,铜版纸热熔胶公司推荐!

在当前热熔胶应用领域不断拓展的背景下,行业发展虽呈现蓬勃态势,但也面临着诸多亟待解决的问题。从市场层面来看,热熔胶产品质量参差不齐,部分厂家为追求短期利益,降低生产标准,导致产品出现粘性不足、易脆断、有…

cyberstrikelab-lab14

flag1 pluck 后台弱密码 cslab 第一次打的时候任意文件上传上传不上去,怀疑是没配置好 temp 目录的权限,这里用另一个漏洞 先把报错的 album 模块删掉 抓包修改 cont2 cont2=;eval($_POST[x]);//蚁剑连接 http://10.…

GreenHat 中文系列教程 2025.10 更新

10 个 LED 极客项目 20 个简单的树莓派项目 FreeBSD 绝对指南 算法思维 安卓恶意软件手册 安卓安全内部原理 面向 Arduino 爱好者的 Arduino 指南 Arduino 发明者指南 Arduino 游乐场 Arduino 项目手册 Arduino 项目手…

编译器细节:动态链接与静态链接行为分析

gcc 与ld.so (以 Alpine Linux为例)背景:Alpine Linux 是一个基于 musl libc 和 busybox 构建的轻量级 Linux 发行版,专注于安全性、资源效率和简洁性。它被广泛用于 Docker 容器、嵌入式系统和云计算环境。gcc 和…

网站图片特效源码品牌建设工作经验

前言&#xff1a;关于MVC和SSM基本内容的梳理&#xff0c;以及两者之间的关系。 文章目录 1. 三层架构2. MVC3. SSM 1. 三层架构 三层架构是指&#xff1a; 视图层view&#xff08;表现层&#xff09;: 用于显示数据和接收用户输入的数据&#xff0c;为用户提供一种交互式操作…

.net做网站用什么框架长春是几线城市2021

0. cas服务搭建参考:CAS 5.3服务器搭建_cas-overlay-CSDN博客 1. 参照springsecurity适配cas的方式, 一直失败, 无奈关闭springssecurity认证 2. 后端服务适配cas: 参考前后端分离项目(springbootvue)接入单点登录cas_前后端分离做cas单点登录-CSDN博客 1) 引入maven依赖 …