坚持每日Codeforces三题挑战:Day 4 - 题目详解(2025-06-07,难度:1000, 1100, 1400)

前言:

此文章主要是记录每天的codeforces刷题,还有就是给其他打算法竞赛的人一点点点点小小的帮助(毕竟现在实力比较菜,题目比较简单,但我还是会认真写题解)。

之前忙学校事情,懈怠了一段时间,今天继续,看能坚持到几天!

开始先来点简单的复健吧,目前分数1449,但是一段时间没训cf,实力应该不到1200,争取20天后开始板刷1600。

每天坚持写三道题第四天:

Problem - D - Codeforces 1000

Problem - B - Codeforces 1100

Problem - C - Codeforces 1400

目录

题目一:

题目大意:

解题思路:

代码(C++):

题目二:

题目大意:

解题思路:

代码(C++):

题目三:

题目大意:

解题思路:

代码(C++):


题目一:

Problem - D - Codeforces

题目大意:

定义字符串中字符的价值为在字母表中的位置,比如a为1,b为2...z为26。

定义字符串的价值为包含的字符价值和。

现在你需要从给定的只有小写字母的字符串中删除若干个元素保证字符串的价值和不超过p。

现在你要保证尽可能少的删除字符。

输出删除字符后的字符串(可能为空)

解题思路:

从大到小的贪心。

我们每次删除价值最大的字符就可以了。

具体实现方案,我们可以用一个数组同时记录此处字符的价值和字符的下标。

然后根据价值从大到小排序,这样就可以保证每次删除的都是价值最大的字符了。

我们可以用一个set记录需要删除的下标,然后遍历字符串输出,遍历到需要删除的就跳过即可。

代码(C++):

void solve() {std::string s;int p;std::cin >> s >> p;int n = s.size();//建立数组,a[i].first表示此时字符的价值,a[i].second表示字符的下标std::vector<std::pair<int, int>> a(n);int total = 0;for (int i = 0; i < n; i++) {int v = s[i] - 'a' + 1;a[i].first = v;total += v;a[i].second = i;}//根据字符的价值从大到小进行排序//也可以直接std::sort(a.begin(), a.end(), std::greater<>());,因为默认是根据第一个元素排序//我这里为了可读性就这么写了std::sort(a.begin(), a.end(), [](auto& v, auto& u) {return v.first > u.first;});//用set存需要删除的下标std::set<int> index;for (int i = 0; i < n; i++) {if (total > p) {total -= a[i].first;index.insert(a[i].second);} else {break;}}for (int i = 0; i < n; i++) {//当set包含下标i,也就是说这个字符需要删除,跳过不输出即可if (index.count(i)) {continue;}std::cout << s[i];}std::cout << "\n";
}

题目二:

Problem - B - Codeforces

题目大意:

现在给你一个长度为n的数组a,现在询问你是否可以重新排列这个数组,使得

min([a1,a2,…,ai])= gcd([ai+1,ai+2,…,an]).(下标从1开始的)。

也就是说,数组前面一部分的最小值,等于数组后面一段所有数字的gcd。

如果可以输出Yes,否则输出No。

解题思路:

我们首先得注意一点:对于一段序列a,gcd(a) <= min(a)是恒成立的。

所以把数组的最小值放在数组开头,是最有可能满足题目条件的。

我们设此时的a[0] = x。

那么数组前面连续一部分的最小值,是绝对等于x的,也就是等式左边等于x

现在我们只需要:

1.在数组中找出是x的倍数的数(这些数组成的序列我设置成b)放在数组最后。

2.不断求序列b的gcd,也就是等式右边,当gcd(b) = x的时候即可表示存在这种情况。

代码(C++):

void solve() {int n;std::cin >> n;std::vector<i64> a(n);i64 mn = 1e18 + 7;for (int i = 0; i < n; i++) {std::cin >> a[i];mn = std::min(mn, a[i]);}//找出最小值放在开头for (int i = 0; i < n; i++) {if (a[i] == mn) {std::swap(a[i], a[0]);break;}}i64 g = 0;for (int i = 1; i < n; i++) {//是a[0]的倍数if (a[i] % a[0] == 0) {g = std::gcd(g, a[i]);if (g == a[0]) {std::cout << "Yes\n";return;}}}std::cout << "No\n";
}

题目三:

Problem - C - Codeforces

题目大意:

现在有一个n * m的矩阵,起初,这个矩阵满足,所有的行和列都满足相加的和相等。

也就是每一行的和都相等,每一列的和都相等,并且任意一行的和等于任意一列的和。

现在一个物体从矩阵的左上方(1, 1)移动到矩阵的右下方(n, m)。

已知这个矩阵的运动路径,D为向下移动,R为向右移动。

经过的方格都会变成0。

现在让你把方格复原,也就是复原这个物体运动路径上的数,使得矩阵的性质不变(行和列相等)。

输出最终复原后的矩阵。输出一种复原情况即可。

解题思路:

首先需要注意到并且理解两个点:

1.物体从左上角移动到右下角,不管怎么走,都会保证每一行每一列至少有一个经过的点(也就是说每行每列中至少存在一个0)。

2.根据1来推理得出,我们只需要修改“每行每列中的0”来调整每一行每一列的和,使其相等即可。

通过上述分析,问题可以转化成,我们需要找出一个和sum,使得方便调整。

注意到:这个和sum = 0的时候最容易调整。

代码实现的时候,可以这么实现:

用i,j表示此时的位置,我们重新走一遍“物体走过的路”:

如果是此时向下走,那么表示需要根据这一列的情况来修改(i, j)处的0。

既然我们要让行和列的和都为0,那么我们可以计算出整个列的和sum_col,然后把此处的0修改成-sum_col即可,这样就可以满足列的值为0了

如果是向右走,那么就表示这一行有一个多出的0,同理进行修改即可。

具体实现可以参考代码。我这里参考的是jiangly老师的写法。

注意可能错的点:给出的字符串长度是n + m - 2,我们实际走的路程是n + m - 2但是实际经过的位置数量是n + m - 1,所以实现的时候要么是开头位置特判,要是是结尾特判。

代码(C++):

void solve() {int n, m;std::string s;std::cin >> n >> m >> s;std::vector a(n, std::vector<i64> (m));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {std::cin >> a[i][j];}}//用(i, j)表示此时的位置,我们重新走一遍这个路线int i = 0, j = 0;while (i + j < n + m - 1) {//如果此时是向下走//特判最后一个位置if (s[i + j] == 'D' || i + j == n + m - 2) {i64 res = 0;//计算这一列的和for (int x = 0; x < m; x++) {res += a[i][x];}a[i][j] = -res;i++;} else if (s[i + j] == 'R') {i64 res = 0;for (int y = 0; y < n; y++) {res += a[y][j];}a[i][j] = -res;j++;}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {std::cout << a[i][j] << " ";}std::cout << "\n";}
}

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

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

相关文章

6.7本日总结

一、英语 复习默写list10list19&#xff0c;07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 本周结束线代第一讲和计组第二章&#xff0c;之后学习计网4.4&#xff0c;学完计网4.4之后开操作系…

PGSR : 基于平面的高斯溅射高保真表面重建【全流程分析与测试!】【2025最新版!!】

【PGSR】: 基于平面的高斯溅射高保真表面重建 前言 三维表面重建是计算机视觉和计算机图形学领域的核心问题之一。随着Neural Radiance Fields (NeRF)和3D Gaussian Splatting (3DGS)技术的发展&#xff0c;从多视角RGB图像重建高质量三维表面成为了研究热点。今天我们要深入…

从认识AI开始-----AutoEncoder:生成模型的起点

前言 从15年开始&#xff0c;在深度学习的重要模型中&#xff0c;AutoEncoder&#xff08;自编码器&#xff09;可以说是打开生成模型世界的起点。它不仅是压缩与重建的工具&#xff0c;更是VAE、GAN、DIffusion等复杂生成模型的思想起源。其实AutoEncoder并不复杂&#xff0c;…

解决MySQL8.4报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

最近使用了MySQL8.4 , 服务启动成功,但是就是无法登陆,并且报错: ERROR 1524 (HY000): Plugin mysql_native_password is not loaded 使用如下的命令也报错 mysql -u root -p -P 3306 问题分析: 在MySQL 8.0版本中,默认的认证插件从mysql_native_password变更为cachi…

TDengine 开发指南——无模式写入

简介 在物联网应用中&#xff0c;为了实现自动化管理、业务分析和设备监控等多种功能&#xff0c;通常需要采集大量的数据项。然而&#xff0c;由于应用逻辑的版本升级和设备自身的硬件调整等原因&#xff0c;数据采集项可能会频繁发生变化。为了应对这种挑战&#xff0c;TDen…

嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)

一、C有几种传值方式之间的区别 一、值传递&#xff08;Pass by Value&#xff09; 机制&#xff1a;创建参数的副本&#xff0c;函数内操作不影响原始数据语法&#xff1a;void func(int x)特点&#xff1a; 数据安全&#xff1a;原始数据不受影响性能开销&#xff1a;需要复…

Spark 之 AQE

个人其他链接 AQE 执行顺序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 产生 AQE 的 循环触发点 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…

FSMC扩展外部SRAM

提示&#xff1a;文章 文章目录 前言一、背景二、2.12.2 三、3.1 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 2025年6月7日 19:34:48 今天看了FSMC扩展外部SRAM的文章&#xff0c;大概理解到stm32除了内部存储器&#xff0c;还可以扩展外部存储器。其中s…

【CSS-6】深入理解CSS复合选择器:提升样式表的精确性与效率

CSS选择器是前端开发的基石&#xff0c;而复合选择器则是其中最强大且实用的工具之一。本文将全面解析CSS复合选择器的类型、用法、优先级规则以及最佳实践&#xff0c;帮助你编写更高效、更精确的样式表。 1. 什么是复合选择器&#xff1f; 复合选择器是通过组合多个简单选择…

使用python实现奔跑的线条效果

效果&#xff0c;展示&#xff08;视频效果展示&#xff09;&#xff1a; 奔跑的线条 from turtle import * import time t1Turtle() t2Turtle() t3Turtle() t1.hideturtle() t2.hideturtle() t3.hideturtle() t1.pencolor("red") t2.pencolor("green") t3…

从零搭建uniapp项目

目录 创建uni-app项目 基础架构 安装 uni-ui 组件库 安装sass依赖 easycom配置组件自动导入 配置view等标签高亮声明 配置uni-ui组件类型声明 解决 标签 错误 关于tsconfig.json中提示报错 关于非原生标签错误&#xff08;看运气&#xff09; 安装 uview-plus 组件库…

Redis主从复制的原理一 之 概述

概述 本文概要性的介绍了Redis主从复制原理&#xff0c;及新旧版本主从复制的区别&#xff0c;优缺点。具体的主从复制过程可详见「Redis主从复制原理二 之 主从复制工作流程」 旧版主从复制的实现 Redis的复制功能分为 同步&#xff08;sync&#xff09;和 命令传播&#xff…

网络原理 4-TCP3

上篇文章&#xff0c;我们讲了TCP协议的连接管理&#xff08;”三次握手“和”四次挥手“的过程&#xff09;。 4、滑动窗口 这个滑动窗口是TCP中非常有特点的机制。我们知道&#xff0c;TCP是通过前面讲的三个机制&#xff1a;确认应答&#xff0c;超时重传&#xff0c;连接…

【使用 Loki + Promtail + Grafana 搭建轻量级容器日志分析平台】

使用 Loki Promtail Grafana 搭建轻量级容器日志分析平台 摘要 本文介绍如何通过 Docker Compose 快速搭建 Loki 日志存储、Promtail 日志采集和 Grafana 日志可视化/告警的完整流程。用最小化示例演示核心配置、常见问题排查和告警规则设置&#xff0c;帮助读者快速上手。…

CRMEB 中 PHP 快递查询扩展实现:涵盖一号通、阿里云、腾讯云

目前已有一号通快递查询、阿里云快递查询扩展 扩展入口文件 文件目录 crmeb\services\express\Express.php 默认一号通快递查询 namespace crmeb\services\express;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\Container; use thi…

使用 Python 自动化 Word 文档样式复制与内容生成

在办公自动化领域&#xff0c;如何高效地处理 Word 文档的样式和内容复制是一个常见需求。本文将通过一个完整的代码示例&#xff0c;展示如何利用 Python 的 python-docx 库实现 Word 文档样式的深度复制 和 动态内容生成&#xff0c;并结合知识库中的最佳实践优化文档处理流程…

【MATLAB代码】基于MCC(最大相关熵)的EKF,一维滤波,用于解决观测噪声的异常|附完整代码,订阅专栏后可直接查看

本文所述的代码实现了一种基于最大相关熵准则(Maximum Correntropy Criterion, MCC)的鲁棒性卡尔曼滤波算法(MCC-KF),重点解决传统卡尔曼滤波在观测噪声存在异常值时估计精度下降的问题。通过引入高斯核函数对残差进行加权处理,有效降低了异常观测值对状态估计的干扰。订…

46、web实验-遍历数据与页面bug修改

46、web实验-遍历数据与页面bug修改 在Web开发中&#xff0c;遍历数据和修改页面bug是常见的任务。以下是关于这两个主题的讲解&#xff1a; ### 一、遍历数据 **目的**&#xff1a;在页面上动态展示数据&#xff0c;例如用户列表、商品信息等。 **常用方法**&#xff1a; ####…

华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己的自定义聊天助手

华为云FlexusDeepSeek征文&#xff5c;体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己的自定义聊天助手 什么是华为云ModelArts 华为云ModelArts ModelArts是华为云提供的全流程AI开发平台&#xff0c;覆盖从数据准备到模型部署的全生命周期管理&#xff0c;帮助…

Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token

Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token 目录 Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token功能解析工作机制应用场景举例说明技术要点在自然语言处理(NLP)领域 都是<CLS> + <SEP>吗?一、CLS和SEP的作用与常见用法1. **CLS标…