坚持每日Codeforces三题挑战:Day 7 - 题目详解(2025-06-11,难度:1200,1300,1500)

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

Problem - A - Codeforces 1200

Problem - B - Codeforces 1300

Problem - A - Codeforces 1500

目录

题目一:

题目大意:

解题思路:

代码(C++):

题目二:

题目大意:

解题思路:

代码(C++):

题目三:

题目大意:

解题思路:

代码(C++):

Python写法:

题目一:

题目二:

题目三:


题目一:

Problem - 27A - Codeforces

题目大意:

现在有一个数组a, 在数组a中添加一个0后,你需要找出数组a中的最小排除数MEX。

MEX的定义:

最小的并且不在集合中的最小非负整数

解题思路:

我们把数组从小到大进行排序,从前往后找。

代码(C++):


void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}//排序std::ranges::sort(a);//不断的检查是否有1,2,3...int x = 1;for (int& v : a) {if (v != x) {std::cout << x << "\n";return;}x++;}std::cout << x << "\n";
}

题目二:

Problem - B - Codeforces

题目大意:

现在给你一个长度为n的排列P,再给你一个长度为m的数组a。

保证m大于等于2且小于等于n,并且数组a中的值在1到n之间,并且各不相同。

我们定义pos(x)表示元素x在排列P中的下标。

现在你可以进行下面的操作若干次:

交换排列P的两个相邻的元素。

再给你一个整数d。

我们的目标是,使用尽可能少的操作,使得存在一个下标i,满足pos(a[i]) >= pos(a[i + 1]) 或者满足pos(a[i + 1])  > pos(a[i]) + d。

输出最少的操作次数。

解题思路:

这题主要是需要我们理解清楚题目意思。

我们的目标就是只需要有一个下标满足题目条件pos(a[i]) >= pos(a[i + 1])或者pos(a[i + 1]) > pos(a[i]) + d即可。

也就是我们遍历数组a,检查一遍相邻的下标,对于这一对下标的a[i], a[i + 1]。找出对应的pos(a[i]), pos(a[i + 1])。

然后判断两种条件是否可以实现,和实现的次数。

对于条件pos(a[i + 1]) > pos(a[i]) + d这个操作需要的操作次数跟d有关,所以具体实现的时候,可能的操作次数需要看能不能在数组n的范围内实现。

具体实现细节可以看代码。

代码(C++):

void solve() {int n, m, d;std::cin >> n >> m >> d;//我们只需要关注排列P的每一个元素所在的下标,//所以输入的时候直接用pos数组存位置即可std::vector<int> pos(n + 1);for (int i = 1; i <= n; i++) {int num;std::cin >> num;pos[num] = i;}std::vector<int> a(m);for (int i = 0; i < m; i++) {std::cin >> a[i];}int ans = 1e9;for (int i = 0; i < m - 1; i++) {//如果已经存在了满足题目条件的相邻下标,那么就不需要操作次数if (pos[a[i]] >= pos[a[i + 1]] || pos[a[i + 1]] > pos[a[i]] + d) {ans = 0;break;}//使得条件一满足的情况需要的操作次数int cnt1 = pos[a[i + 1]] - pos[a[i]];//使得条件二满足“可能”需要的操作次数int cnt2 = d - cnt1 + 1;//如果这个可能性无法满足if (cnt2 > (pos[a[i]] - 1) + (n - pos[a[i + 1]])) {cnt2 = 1e9;}ans = std::min({ans, cnt1, cnt2});}std::cout << ans << "\n";
}

题目三:

Problem - A - Codeforces

题目大意:

现在有一个数组a,你必须不断的进行下面的操作,直到无法进行:

选择数组a最前面的两个数字x, y,然后把gcd(x, y)加到分数上。

然后删除这两个数字。

数组中的数字不足两个的时候,无法操作。

现在你需要重新给数组进行赋值,保证每个数字都不相同,并且保证进行操作后,也就是不断取数字后,最终的得分为k。

现在给你数组的长度n和k,输出你重新赋值后的数组。

解题思路:

每次操作都是取两个数字,并且取到数组中数字不足两个

那么也就是说,如果数组长度n为奇数,那么我们不需要关注最后一个数字。

可以进行这个操作后把n -= 1,保证现在的n为偶数。

现在我们有 n / 2对数字,现在我们需要把每一对的数字的gcd的和加上等于k。

我们可以注意到

每一对数字的gcd的最小值是1,那么n / 2对数字的gcd的和的最小值为n / 2

如果k < n / 2,则无法实现,输出-1。

可以想到一个简单方案:

n / 2 - 1对数字的gcd都设置成1,那么我们还需要凑下x = k - n / 2 - 1才能到k,

我们可以把剩下的一对的数字的gcd设置成x即可。

具体实现方法参考代码

代码(C++):

void solve() {int n, k;std::cin >> n >> k;//特判,当n == 1的时候,也就是只有一个元素,无法进行取数字的操作if (n == 1) {//k == 0的时候,那这个元素任意都行,k不等于0为-1std::cout << (k == 0 ? 1 : -1) << "\n";return;}std::vector<int> ans(n);//如果n为奇数先把最后一个元素填上//然后把n变成偶数if (n % 2) {ans[n - 1] = 1e9;n -= 1;}//现在n为偶数,并且取两个数字的gcd最小值为1,也就是此时的分数最小值为n / 2if (k < n / 2) {std::cout << "-1\n";return;}//我们可以把后面的n - 2个数字的每一对数字的gcd变成1,总共的得分也就是(n - 2) / 2//现在我们还需要k - (n - 2) / 2才能凑到k,那么我们用下面的操作即可int x = k - (n - 2) / 2;ans[0] = x;ans[1] = x * 2;int num = x * 2 + 1;for (int i = 2; i < n; i += 2) {ans[i] = num;ans[i + 1] = num + 1;num += 2;}for (int& v : ans) {std::cout << v << " ";}std::cout << "\n";
}

Python写法:

题目一:

def solve():n = II()a = LII()a.sort()x = 1for v in a:if x != v:print(x)returnx += 1print(x)

题目二:

def solve():n, m, d = MII()P = LII()pos = [0] * (n + 1)for i in range(n):pos[P[i]] = ia = LII()ans = int(1e9)for i in range(0, m - 1):if pos[a[i]] >= pos[a[i + 1]] or pos[a[i + 1]] > pos[a[i]] + d:ans = 0breakcnt1 = pos[a[i + 1]] - pos[a[i]]cnt2 = d - cnt1 + 1if cnt2 > (pos[a[i]] - 1) + (n - pos[a[i + 1]]):cnt2 = int(1e9)ans = min([ans, cnt1, cnt2])print(ans)

题目三:

def solve():n, k = MII()if n == 1:print(1 if k == 0 else -1)returnans = [0] * nif n % 2:ans[n - 1] = int(1e9)n -= 1if k < n // 2:print(-1)returnx = k - (n - 2) // 2ans[0] = xans[1] = x * 2num = x * 2 + 1for i in range(2, n, 2):ans[i] = numans[i + 1] = num + 1num += 2print(' '.join(map(str, ans)))

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

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

相关文章

洛谷 P4305:[JLOI2011] 不重复数字 ← unordered_set

【题目来源】 https://www.luogu.com.cn/problem/P4305 【题目描述】 给定 n 个数&#xff0c;要求把其中重复的去掉&#xff0c;只保留第一次出现的数。 【输入格式】 第一行一个整数 T&#xff0c;表示数据组数。 对于每组数据&#xff0c;第一行一个整数 n。第二行 n 个数…

STM32固件升级设计——SPIFLASH模拟U盘升级固件

目录 概述 一、功能描述 1、BootLoader部分&#xff1a; 2、APP部分&#xff1a; 二、BootLoader程序制作 1、分区定义 2、 主函数 3、配置USB 4、配置fatfs文件系统 5、程序跳转 三、APP程序制作 四、工程配置&#xff08;默认KEIL5&#xff09; 五、运行测试 六…

解锁阿里云日志服务SLS:云时代的日志管理利器

引言&#xff1a;开启日志管理新篇 在云计算时代&#xff0c;数据如同企业的血液&#xff0c;源源不断地产生并流动。从用户的每一次点击&#xff0c;到系统后台的每一个操作&#xff0c;数据都在记录着企业运营的轨迹。而在这些海量的数据中&#xff0c;日志数据占据着至关重…

Keye-VL-8B-Preview:由快手 Kwai Keye 团队精心打造的尖端多模态大语言模型

&#x1f525; News 2025.06.26 &#x1f31f; 我们非常自豪地推出Kwai Keye-VL&#xff0c;这是快手Kwai Keye团队精心打造的前沿多模态大语言模型。作为快手先进技术生态中的核心AI产品&#xff0c;Keye在视频理解、视觉感知和推理任务方面表现卓越&#xff0c;树立了新的性…

Web前端之JavaScript实现图片圆环、圆环元素根据角度指向圆心、translate、rotate

MENU 前言效果HtmlStyleJavaScript 前言 代码段创建了一个由6个WiFi图标组成的圆形排列&#xff0c;每个图标均匀分布在圆周上。 效果 Html 代码 <div class"ring"><div class"item"><img class"img" src"../image/icon/W…

1 Studying《Computer Vision: Algorithms and Applications 2nd Edition》11-15

目录 Chapter 11 Structure from motion and SLAM 11.1 几何内禀校准 11.2 姿态估计 11.3 从运动中获得的双帧结构 11.4 从运动中提取多帧结构 11.5 同步定位与建图&#xff08;SLAM&#xff09; 11.6 额外阅读 Chapter 12 Depth estimation 12.1 极点几何 12.2 稀疏…

phpstudy 可以按照mysql 数据库

phpstudy 可以按照mysql 数据库 PHPStudy&#xff08;小皮面板&#xff09;是一款专为开发者设计的集成环境工具&#xff0c;涵盖服务器配置、开发环境搭建、网站部署等多项功能。以下是其核心用途及优势的详细解析&#xff1a; 一、开发环境快速搭建 一站式集成环境集成Apa…

Python搭建HTTP服务,如何用内网穿透快速远程访问?

Python的内置HTTP服务模块是开发者工具箱中的瑞士军刀&#xff0c;只需一行命令即可启动一个功能完备的Web服务器。无论是前端工程师调试页面、数据科学家共享Jupyter Notebook&#xff0c;还是后端开发者快速验证API原型&#xff0c;Python HTTP服务都能以零配置的方式满足需求…

拨号音识别系统的设计与实现

拨号音识别系统的设计与实现 摘要 本文设计并实现了一个完整的拨号音识别系统&#xff0c;该系统能够自动识别电话号码中的数字。系统基于双音多频(DTMF)技术原理&#xff0c;使用MATLAB开发&#xff0c;包含GUI界面展示处理过程和结果。系统支持从麦克风实时录音或加载音频文…

数据结构-树详解

树简介 树存储和组织具有层级结构的数据&#xff08;例&#xff1a;公司职级&#xff09;&#xff0c;就是一颗倒立生长的树。 属性&#xff1a; 递归n个节点有n-1个连接节点x的深度&#xff1a;节点x到根节点的最长路径节点x的高度&#xff1a;节点x到叶子节点的最长路径 …

【安卓Sensor框架-2】应用注册Sensor 流程

注册传感器的核心流程为如下&#xff1a;应用层调用 SensorManager注册传感器&#xff0c;framework层创建SensorEventQueue对象&#xff08;事件队列&#xff09;&#xff0c;通过JNI调用Native方法nativeEnableSensor()&#xff1b;SensorService服务端createEventQueue()创建…

新版本没有docker-desktop-data分发 | docker desktop 镜像迁移

在新版本的docker desktop中&#xff08;如4.42版本&#xff09;&#xff0c;镜像迁移只需要更改路径即可。如下&#xff1a; 打开docker desktop的设置&#xff08;图1&#xff09;&#xff0c;将图2的原来的地址C:\Users\用户\AppData\Local\Docker\wsl修改为你想要的空文件…

EtherCAT SOEM源码分析 - ec_init

ec_init SOEM主站一切开始的地方始于ec_init, 它是EtherCAT主站初始化的入口。初始化SOEM 主站&#xff0c;并绑定到socket到ifname。 /** Initialise lib in single NIC mode* param[in] ifname Dev name, f.e. "eth0"* return >0 if OK* see ecx_init*/ in…

84、原理解析-SpringApplication创建初始化流程

84、原理解析-SpringApplication初始化流程 # SpringApplication创建初始化流程原理解析 SpringApplication的创建和初始化是Spring Boot应用启动的关键步骤&#xff0c;主要包括以下过程&#xff1a; ## 1. 创建SpringApplication实例 ### 1.1 调用构造函数 - 当调用SpringApp…

【数理逻辑】 选择公理与集值映射

目录 选择公理1. 有限指标集 I I I2. 可数无限指标集 I I I &#xff08;简称为 ACC 或 ACω&#xff09;3. 不可数无限指标集 I I I4. 选择公理的层级与数学应用5. 选择公理的深层意义 集值映射的选择函数1. 选择公理的核心作用2. 不同情况下的依赖性分析3. AC 的必要性证明…

微信小程序使用wx.chooseImage上传图片时进行压缩,并添加时间水印

在微信小程序的开发过程&#xff0c;经常会使用自带的api(wx.chooseImage)进行图片拍照或选择图片进行上传&#xff0c;有时图片太大&#xff0c;造成上传和下载时过慢&#xff0c;现对图片进行压缩后上传&#xff0c;以下是流程和代码 一、小程序的版本选择了3.2.5&#xff0…

RAII简介

&#x1f4e6; 一、技术原理简介&#xff1a;RAII是个“托管狂魔” 想象你有个健忘的朋友&#xff0c;每次借东西都会忘记归还。RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;资源获取即初始化&#xff09;就是C派来的“超级管家”&#xff1a; “你负…

微信小程序入门实例_____打造你的专属单词速记小程序

上次通过天气查询小程序&#xff0c;我们初探了微信小程序开发的世界。这次&#xff0c;咱们再挑战一个有趣又实用的项目 ——“单词速记小程序”。无论是学生党备考&#xff0c;还是上班族提升英语&#xff0c;都能用得上&#xff01;接下来就跟着我&#xff0c;一步一步把它做…

gateway白名单存储nacos,改成存储数据库

前言 很久没写博客了&#xff0c;csdn都开始ai润色了&#xff0c;之前都是看相应框架的源码看了个遍&#xff0c;感觉底层原理都差不多&#xff0c;这阵子着手改造了下gateway中的白名单&#xff0c;之前白名单存储到nacos&#xff0c;要改成存到数据库。里面涉及到浅浅的源码…

ubentu服务器版本安装Dify

Docker 中安装Dify 首先安装Docker 1. 克隆Dify代码仓库 从github克隆 Dify 源代码至要本地环境。 我的ubentu服务器版本&#xff0c;我把源代码下载到 /var/下 在var文件夹下执行 git clone https://github.com/langgenius/dify.git执行成功后&#xff0c;进入Dify源代码的…