Codeforces Round 981 (Div. 3) A - E 详细题解(C++)

本文为Codeforces Round 981 (Div. 3) A - E 详细题解,觉得有帮助或者写的不错可以点个赞

题A:

题目大意和解答思路:

代码(C++):

题B:

题目大意和解答思路:

代码(C++):

题C:

题目大意和解答思路:

代码(C++):

题D:

题目大意和解答思路:

代码(C++):

题E:

题目大意和解答思路:

代码(C++):


题A:

Problem - A - Codeforces

题目大意和解答思路:

有一个点初始在0的位置,第i次(从1开始)操作可以将点移动2 * i - 1的距离。
玩家S先手,负方向移动,K后手,正方向移动

然后给你一个数字n,表示当点移动出 [-n, n]的时候,最后一个是谁

n的大小为100,可以直接根据题目意思进行模拟

代码如下

void solve() {int n;std::cin >> n;int x = 0;int i = 1;while (true) {x -= (2 * i - 1);if (abs(x) > n) {std::cout << "Sakurako\n";return;}i++;x += (2 * i - 1);if (abs(x) > n) {std::cout << "Kosuke\n";return;}i++;}
}

但是可以很容易的发现,先手的S总是向负方向移动,后手的K总是向正方向移动,每次移动的距离为2 * i - 1,从1开始的奇数,所以可以把每次移动点的位置写下来:
-1, 2, -3, 4....


可以发现负方向都是奇数,正方向都是偶数,由于奇数是先手的,那么当n为奇数的时候,负方向会超过[-n, n],以此可以写出O(1)的代码


代码(C++):

void solve() {int n;std::cin >> n;std::cout << (n % 2 == 0 ? "Sakurako\n" : "Kosuke\n");
}

题B:

Problem - B - Codeforces

题目大意和解答思路:

这题给你一个长度为n的矩阵,由正数和负数组成
现在你可以进行下面的操作:
选择一个子矩阵,把这个子矩阵的主对角线,就是从左上到右下角的那一条对角线的所有元素加1
现在询问你,最少需要多少次操作才能使得矩阵中没有负数

这个题目读懂后还是比较简单的,每次都是对角线的元素增加1,那么可以把所有的”对角线“中的最小值找出来,然后就是答案就是所有的最小值相加

具体过程,我们可以发现,这种满足”对角线“性质的,i - j是相同的,那么可以使用一个map进行存储


代码(C++):

void solve() {int n;std::cin >> n;std::vector<std::vector<int>> A(n, std::vector<int> (n));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {std::cin >> A[i][j];}}std::map<int, int> mp;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {mp[i - j] = std::min(mp[i - j], A[i][j]);}}i64 res = 0;for (auto [_, val] : mp) {res -= val;}std::cout << res << "\n";
}

题C:

Problem - C - Codeforces

题目大意和解答思路:

题目意思就是说,给你一个数组,你可以交换对称位置的元素,比如第一个跟最后一个交换

可以交换任意次
然后使得数组里面相邻的数字个数最小

这个可以用dp的,但是不用这么麻烦

可以从题目的角度出发,想想每次交换会变什么

交换这个数字前,统计这个位置和交换后位置的”相邻数字个数“总和

交换数组后,再统计一次

对比这两个数字来确定此次交换是否进行即可

最后统计相邻数字个数即可,直接看代码实现


代码(C++):

void solve() {int n;std::cin >> n;std::vector<int> A(n);for (int i = 0; i < n; i++) {std::cin >> A[i];}for (int i = 1; i < n / 2; i++) {int c0 = (A[i] == A[i - 1]) + (A[n - i - 1] == A[n - i]);std::swap(A[i], A[n - i - 1]);int c1 = (A[i] == A[i - 1]) + (A[n - i - 1] == A[n - i]);if (c0 < c1) {std::swap(A[i], A[n - i - 1]);}}int res = 0;for (int i = 0; i < n - 1; i++) {res += (A[i] == A[i + 1]);}std::cout << res << "\n";
}

题D:

Problem - D - Codeforces

题目大意和解答思路:

D题按理说是比C题简单很多的,因为比较常规,但是我用了unordered_map,被hack了。。

这个题目定义了一个最美丽的片段:

一段[l, r] 的区间和为0就是最美丽片段

然后让你求出数组中,最多能有多少个不重叠的最美丽片段

贪心+前缀和+两数之和套路(枚举右,维护左)

可以先求出一个前缀和数组prefix_sum,然后[l, r]之间的和就是prefix_sum[r] - prefix_sum[r]
遍历前缀和数组,再用一个哈希表维护找寻差为0的

要使得不重叠片段最多,那么往后遍历,每找到一个片段就算一个

可以再优化一下空间,不需要前缀和数组,直接用一个变量加当前数组的和即可

找到一个区间即可清空哈希表,因为这一段是不重合的区间

还有要注意的就是需要mp[0] = 1,因为单独的0也算


代码(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::map<i64, int> mp;int res = 0;i64 sum = 0;mp[0] = 1; //注意这一步for (int i = 0; i < n; i++) {sum += A[i];if (mp.count(sum)) {res++;mp.clear();mp[0] = 1;sum = 0;continue;}mp[sum]++;}std::cout << res << "\n";
}

题E:

Problem - E - Codeforces

题目大意和解答思路:

给你一个数组,你可以交换任意两个元素,使得数组中所有元素满足下面的一个条件即可:
p_i = i

p_(pi) = i

让你找出最小交换次数

既然是可以进行交换实现要求的,那么数组元素肯定满足由1 ~ n这n个元素组成

那么可以建立一个全部元素满足条件2的数组P

就是P[A[i]] = i

可以对每一个i进行维护, 如果此时的i既不满足条件1也不满足条件2

那么就A[A[i]] 和 A[P[i]] 进行交换使得此时的i满足条件

 i 要么直接到达正确位置,要么满足 ppi = i 的条件

这种方法每次交换都至少让一个元素满足,所以是最小的

代码(C++):

void solve() {int n;std::cin >> n;std::vector<int> A(n + 1), P(n + 1);for (int i = 1; i <= n; i++) {std::cin >> A[i];P[A[i]] = i;}int res = 0;for (int i = 1; i <= n; i++) {if (A[i] != i && A[A[i]] != i) {int p = A[A[i]], p2 = i;std::swap(A[A[i]], A[P[i]]);std::swap(P[p], P[p2]);res++;}}std::cout << res << "\n";
}

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

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

相关文章

Java基础(7)图书管理系统

目录 1.前言 2.正文 2.1思路 2.2Book包 2.3people包 2.4operation包 2.5主函数 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来给前面Java基础的学习来一个基础的实战&#xff0c;做一个简单的图书管理系统&#xff0c;这里边综合利用了我们之前学习到的类和对象&…

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付

Android调用系统相机录像并设置参数

最近要做一个 Android上的录像功能&#xff0c;由于之前做拍照功能完全是用自定义方式&#xff0c;太麻烦。故这次决定直接调用系统相机来录像。 一、添加权限 首先&#xff0c;添加必要的权限 <!-- 授予该程序使用摄像头的权限 --><uses-permission android:name&q…

Could not find artifact cn.hutool:hutool-all:jar:8.1 in central 导入Hutool报错

<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.9</version></dependency> 引入hutool 8.1版本的工具…

攻防世界-流量分析WP

流量分析1来自 <攻防世界> 题目描述:流量分析&#xff0c;你知道这堆流量做了什么事情吗&#xff0c;你能恢复出来flag吗&#xff1f; 1&#xff0c;首先查看IPv4统计信息 如果该流量记录的是黑客的攻击行为产生的流量&#xff0c;那么出现频率最高的流量应该来自攻击者…

2024软考网络工程师笔记 - 第8章.网络安全

文章目录 网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型3️⃣安全目标与技术 &#x1f551;现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552…

论文笔记:LaDe: The First Comprehensive Last-mile Delivery Dataset from Industry

2023 KDD 1 intro 1.1 背景 随着城市化进程的加快和电子商务的发展&#xff0c;最后一公里配送已成为一个关键的研究领域 最后一公里配送&#xff0c;如图1所示&#xff0c;是指连接配送中心和客户的包裹运输过程&#xff0c;包括包裹的取件和配送除了对客户满意度至关重要外…

cpp的vector类

本篇将讲述vector类中的各种重要和常用函数&#xff08;begin&#xff08;&#xff09;、end&#xff08;&#xff09;、rbegin&#xff08;&#xff09;、rend&#xff08;&#xff09;cbegin&#xff08;&#xff09;、cend&#xff08;&#xff09; 、crbegin&#xff08;&a…

Vuejs设计与实现 — 渲染器核心:挂载与更新

前言 挂载 与 更新 是 渲染器 的核心功能&#xff0c;也是渲染器应该要提供的基本功能&#xff0c;而 挂载 和 更新 又是基于 VNode 虚拟节点的&#xff0c;因为 VNode 节点描述了其对应的 真实 DOM 应该是什么样子的。 挂载与卸载 VNode 节点 无论是 vue 还是 react 都引入…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目&#xff0c;所以这里就结合一下&#xff0c;在搭建 k8s 集群后安装运维常用服务&#xff0c;比如 ansible 和 prometheus&#xff0c;用 NFS 实现数据存储同步&#xff0c…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的&#xff1f;在文章开头我们提出这个疑问&#xff0c;带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容&#xff0c;在日常App 中非常常见&#xff0c;比如微博的发布与展示&#xff0c;朋友圈的发布与展示&#xff0c;都在使用富文…

LeetCode_231. 2 的幂_java

1、题目 231. 2 的幂https://leetcode.cn/problems/power-of-two/ 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n &#xff0c;则认为 n 是 2 的幂次方…

ComfyUI初体验

ComfyUI 我就不过多介绍了&#xff0c;安装和基础使用可以看下面大佬的视频&#xff0c;感觉自己靠图文描述的效果不一定好&#xff0c;大家看视频比较方便。 ComfyUI全球爆红&#xff0c;AI绘画进入“工作流时代”&#xff1f;做最好懂的Comfy UI入门教程&#xff1a;Stable D…

ArcGIS001:ArcGIS10.2安装教程

摘要&#xff1a;本文详细介绍arcgis10.2的安装、破解、汉化过程。 一、软件下载 安装包链接&#xff1a;https://pan.baidu.com/s/1T3UJ7t_ELZ73TH2wGOcfpg?pwd08zk 提取码&#xff1a;08zk 二、安装NET Framework 3.5 双击打开控制面板&#xff0c;点击【卸载程序】&…

dbt-codegen: dbt自动生成模板代码

dbt项目采用工程化思维&#xff0c;数据模型分层实现&#xff0c;支持描述模型文档和测试&#xff0c;非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件&#xff0c;这个过程非常容易出错且无聊。主要表现&#xff1a; 手工为dbt模型编写yaml文件&#xff0c;这过…

STM32传感器模块编程实践(十一) ADC模数转换模块ADS1115简介及驱动源码

文章目录 一.概要二.ADS1115芯片介绍三.ADS1115芯片主要特性四.ADS1115模块接线说明五.ADS1115参考原理图六.通讯协议介绍七.STM32单片机与ADS1115模块实现电压采集实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 八.源代码工程下载九.小结 一.概要 ADC&#xff0c;全称为…

认识和使用 Vite 环境变量配置,优化定制化开发体验

Vite 官方中文文档&#xff1a;https://cn.vitejs.dev/ 环境变量 Vite 内置的环境变量如下&#xff1a; {"MODE": "development", // 应用的运行环境"BASE_URL": "/", // 部署应用时使用的 URL 前缀"PROD": false, //应用…

JavaScript完整笔记

JS引入 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有两种方式&#xff1a; 内部方式 通过 script 标签包裹 JavaScript 代码 我们将 &…

使用FRP搭建内网穿透服务(新版toml配置文件,搭配反向代理方便内网网站访问)【使用frp搭建内网穿透】

FRP&#xff08;Fast Reverse Proxy&#xff09;是一个高性能的反向代理应用程序&#xff0c;主要用于内网穿透。它允许用户将内部网络服务暴露到外部网络&#xff0c;适用于 NAT 或防火墙环境下的服务访问。 他是一个开源的 服务 如果大家不想用 花生壳 软件&#xff0c;可以尝…

卷积神经网络评价指标

1.评价指标的作用 1. 性能评估&#xff1a;评价指标提供了一种量化的方式来衡量CNN模型的性能。通过这些指标&#xff0c;我们可以了解模型在特定任务上的表现&#xff0c;比如图像分类、目标检测或图像分割等。 2. 模型比较&#xff1a;不同的模型架构或训练策略可能会产生不…