本文为AtCoder Beginner Contest 409 的详细题解

目录

题目A:

题目大意:

解题思路:

代码(C++):

题目B:

题目大意:

解题思路:

代码(C++):

题目C:

题目大意:

解题思路:

代码(C++):

题目D:

题目大意:

解题思路:

代码(C++):

题目E:

题目大意:

解题思路:

代码(C++):


题目A:

A - Conflict

题目大意:

给你两个长度为n的字符串s和t,都只包含小写字母‘x’,'o'。

现在要找出是否有一个下标i满足s[i] == t[i] == 'o'

解题思路:

直接可以题目意思进行代码实现即可。

遍历一遍,找到满足条件的输出Yes即可

具体看代码实现。

代码(C++):

void solve() {int n;std::string s, t;std::cin >> n >> s >> t;int ans = 0;for (int i = 0; i < n; i++) {if (s[i] == t[i] && s[i] == 'o') {std::cout << "Yes\n";return;}}std::cout << "No\n";
}

题目B:

B - Citation

题目大意:

现在给你一个数组a,你需要找出满足下面条件的最大的整数x:

x满足,在数组a中,大于或等于x的元素在数组中至少出现x次。

解题思路:

我们先从最小的开始看,从特殊到一般:

大于等于0的元素在数组中至少出现0次。

大于等于1的元素在数组中至少出现1次。

大于等于2的元素在数组中出现至少2次。

...

我们很明显可以注意到一点:

随着x的值增加,就表明我们需要在数组中找到更多的数字来满足大于x。

每增加1就需要多找一个数字满足a[i] > x。

那么总会有一个临界点的x,使得数组中无法再找出x个数字来满足大于它了。

那么思路就可以来了,我们直接从数组元素中最大的开始,可以先对数组排序,将x的初始值设置为0,从数组中最大的开始,如果能找到这样一个x,就让x++即可。

代码(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::sort(a.begin(), a.end(), std::greater<>());int x = 0;for (int i = 0; i < n; i++) {if (a[i] >= x + 1 && i >= x) {x++;}}std::cout << x << "\n";
}

题目C:

C - Equilateral Triangle

题目大意:

给你一个周长为L的圆,现在圆上有n个点。

给你n - 1个数字di, 其中di表示第i + 1个点位于第i个点沿着圆周顺时针di的位置。

其中L和di都为整数。

现在你需要找出在圆上不同的三个点,使得这三个点组成的三角形为等边三角形。

解题思路:

首先得明白关键点:

周长L和每一个点的距离d都是都是整数,那么我们要找到这样一个等边三角形的话,三个点一定是将圆平分成三等分的(这个可以通过连接点和圆心,进行简单的证明)。

既然能三等分周长,那么周长必须是3的倍数。

距离d都是整数,周长为L,我们可以把圆划分成L段,然后计算出每个整数位置的点的个数。

我们可以第0个点的位置设置成0,然后根据题目中给的d计算出每一个位置中点的个数。

假设构成等边三角形的其中一个点的位置为i,那么根据上面的分析,剩下的两个点的位置为i + L / 3, i + 2 * L / 3,也就是分别加上L / 3。

最后满足这样的三角形的三个不同点的个数,可以用乘法原理做,最后除以三即可。

具体看代码实现。

代码(C++):

void solve() {int n, l;std::cin >> n >> l;std::vector<int> cnt(l);cnt[0] = 1;int pos = 0;for (int i = 0; i < n - 1; i++) {int d;std::cin >> d;pos = (pos + d) % l;cnt[pos]++;}if (l % 3 != 0) {std::cout << "0\n";return;}i64 ans = 0;for (int i = 0; i < l; i++) {ans += 1LL * cnt[i] * cnt[(i + l / 3) % l] * cnt[(i + l * 2 / 3) % l];}std::cout << ans / 3 << "\n";
}

题目D:

D - String Rotation

题目大意:

给你一个长度为n的字符串s,现在你可以进行以下操作一次:

选择一个下标i,将s[i]插入到字符串的任意位置,并且删除s[i]。

你需要进行一次操作,使得字符串字典序最小,找出字典序最小的这个字符串。

解题思路:

两个字符串的字典序有一个很常规的比较方法:

从最左边的字符开始比较,逐一比较,当遇到两个不同的字符的时候,比较这两个字符的字典序即可,字符小的那个字符串,即为字典序小的字符串。

题目的意思其实就是把字符中的一个字符进行移动,然后使得字典序尽可能小。

也就是说,字符串的字符构成是不变的。

根据上述分析我们可以得出:

1.在所有的字符字符从小到大排列(也就是升序排列)的时候,此时字符串的字典序最小。

2.我们从前往后对比,当遇到字符不是按升序排列的那个字符的时候,把这个字符往后面放,使得字符串前部分按照升序排列即可。

代码参考官方题解

代码(C++):

void solve() {int n;std::string s;std::cin >> n >> s;int l = -1;for (int i = 0; i < n - 1; i++) {if (s[i] > s[i + 1]) {l = i;break;}}if (l == -1) {std::cout << s << "\n";return;}int r = n;for (int i = l + 1; i < n; i++) {if (s[l] < s[i]) {r = i;break;}}std::string ans = s.substr(0, l) + s.substr(l + 1, r - l - 1) + s[l] + s.substr(r);std::cout << ans << "\n";
}

题目E:

E - Pair Annihilation

题目大意:

现在有一颗包含n个节点的树,并且给出你边的连接关系和边的权重:

节点ui和vi之间有一条权重为wi的边。

现在这个树的每一个节点上都有xi个正电子或者xi个电子。

你把一个正电子或者电子从节点ui移动到节点vi需要消耗wi个单位的能量,一个正电子和一个电子相遇会湮灭消失。

保证树上的正电子的数目和电子数目相等。

现在你需要通过移动其中的正电子或者电子,是得所有的电子消失,输出需要消耗的最小能量。

解题思路:

题目的关键点是,保证正电子数量和电子数量相等。

既然是一个树,那么显而易见的适合的移动方案:

把叶子节点的电子或者正电子,往根节点移动,全部移到根节点。

代码参考官方题解

代码(C++):

void solve() {int n;std::cin >> n;std::vector<i64> X(n);for (int i = 0; i < n; i++) {std::cin >> X[i];}std::vector<std::vector<std::pair<int, i64>>> Trees(n);for (int i = 0; i < n - 1; i++) {int u, v;i64 w;std::cin >> u >> v >> w;u--;v--;Trees[u].push_back({v, w});Trees[v].push_back({u, w});}i64 ans = 0;std::function<void(int, int)> dfs;dfs = [&](int v, int fa) -> void {for (auto& [c, w] : Trees[v]) {if (c == fa) {continue;}//往下搜子节点dfs(c, v);//加上此时下面所有的子节点移动到此时这个根节点所需要的能量ans += w * abs(X[c]);//移动,并且进行消耗(正负抵消)X[v] += X[c];}};dfs(0, -1);std::cout << ans << "\n";
}

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

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

相关文章

Spring @Environment 典型用法

简单说&#xff1a;Spring 里没有直接叫 Environment 的注解&#xff0c;更准确说常用的是 Autowired 注入 Environment 对象&#xff0c;或者结合 Value 配合 Environment 读取配置 。 支持从以下来源读取&#xff1a; 1、application.properties / .yaml 2、JVM 参数&#xf…

【集合与结构体】5.2(课本题)总结代码

ds老师产物&#xff0c;纯为期末复习&#xff0c;自用。 题目1 编写程序&#xff0c;将一个整型变量右移 4 位&#xff0c;并以二进制数形式输出该整数在移位前和移位后的数值。 //观察系统填补空缺的数位情况 代码解答 #include <iostream>//编写程序&#xff0c;将一个…

16.max/min最大最小值函数

1.基本使用 max/min函数返回满足where条件的一列的最大/最小值。 select max(column_name)|min(column_name) from table_namewhere where_definition 示例&#xff1a; ①求班级总分的最高分 #求班级总分的最高分 SELECT MAX(math_scorechinese_scoreenglish_score)AS 总分…

需要做一款小程序,用来发券,后端如何进行设计能够保证足够安全?

温馨提示&#xff1a;本文由ai生成&#xff0c;请辨别阅读&#xff0c;本文仅提供一种思考的方式和设计思路 设计一个安全的后端系统&#xff0c;用于发放优惠券的小程序&#xff0c;需要考虑多个安全层面&#xff0c;包括身份验证、数据安全、API 安全、以及防止常见攻击&…

ACM设计平台-核心模块解析-赵家康

负责模块解析-赵家康 一、Login.vue 功能逻辑、数据绑定、表单验证、与后端交互 Vue 登录页面的代码设计 代码功能概览 代码实现了一个典型的登录页功能&#xff0c;核心包括&#xff1a; 表单输入&#xff08;学号、用户名、密码、验证码&#xff09; 验证码生成与校验 勾…

在 VMware (WM) 虚拟机上安装的 Ubuntu 22.04 分配了 20GB 磁盘,但仅使用 10GB 就显示 “空间已满“

可能原因及解决方案 虚拟机磁盘未实际扩容&#xff08;仅调整了虚拟大小&#xff09; 现象&#xff1a;在 VMware 里调整了磁盘大小&#xff08;如 20GB → 50GB&#xff09;&#xff0c;但 Ubuntu 内部仍只识别 10GB。 原因&#xff1a;VMware 调整的是虚拟磁盘上限&#xf…

初学STM32全功能按键非阻塞式实现和强化

其实笔者以前学51的时候按键功能就包含非阻塞式的&#xff0c;而且还包括矩阵按键的非组塞式按键实现。开关的长短键功能笔者在之前的51博文中笔者自己尝试写过&#xff0c;功能是有了但写的其实很混乱&#xff0c;几乎没有移植的价值。这次江科大刚好出了新的教程&#xff0c;…

【网络原理】网络原理简单认识 —— 内含网络通信基础、五元组、网络协议(OSI 七层协议、TCP/IP 五层(或四层)协议)、封装和分用

目录 1. 网络互连 1.1 局域网LAN 1.2 广域网WAN 2 网络通信基础 2.1 IP地址 2.2 端口号 2.3 网络协议 3. 五元组 4. 协议分层 4.1 OSI 七层网络模型 4.2 TCP/IP 五层&#xff08;或四层&#xff09;网络模型 4.3 网络设备所在分层(经典笔试题) 5. 网络数据传输的基…

嵌入式之硬件学习(三)通信方式、串口通信

目录 一、通信种类 1、并行通信 2、串行通信 3、单工模式(Simplex Communication) 4、半双工通信(Half-Duplex Communication) 5、全双工通信(Full-Duplex Communication) 6、串行的异步通信与同步通信 &#xff08;1&#xff09;异步通信 &#xff08;2&#xff09;同…

【微信小程序】3、SpringBoot整合WxJava发送订阅消息

1、创建消息模板 在公共模板库里面选择符合自己业务场景的消息模板&#xff0c;例如&#xff1a; 每个消息模板最多选择5项&#xff0c;可根据自己业务需求自行选择&#xff0c;顺序也可以自己决定。提交后&#xff0c;我们就得到了属于自己的消息模板ID 2、文档阅读 官方文…

Flask 快速精通:从入门到实战的轻量级 Web 框架指南

Flask 作为 Python 生态中最受欢迎的轻量级 Web 框架&#xff0c;以其简洁灵活的设计理念赢得了开发者的青睐。本文将系统梳理 Flask 的核心概念与实战技巧&#xff0c;帮助你快速掌握这一强大框架。 一、Flask 框架概述 1.1 轻量级框架的核心特性 Flask 诞生于 2010 年&…

Python爬取豆瓣短评并生成词云分析

一、项目概述 本项目的目标是爬取豆瓣上某部电影的短评数据&#xff0c;并生成词云进行情感分析。我们将使用Python编程语言&#xff0c;借助爬虫技术获取数据&#xff0c;并利用自然语言处理和数据可视化工具进行分析。具体步骤包括&#xff1a; 爬取豆瓣短评数据。数据清洗…

Controller Area Network (CAN) 通信机制简介

目录 1. CAN 概述 2. 物理结构与传输机制 3. 消息格式与仲裁机制 4. 错误检测与总线状态 5. 工业用 CAN 接口 6. 本讲总结 1. CAN 概述 CAN&#xff08;Controller Area Network&#xff09;是由德国博世&#xff08;Bosch&#xff09;公司于 1983 年提出的串行通信协议…

我有一个想法

我有一个想法 我想为家乡做点事情&#xff0c;但是又不知道从哪里开始。 也许为家乡的教育做点事情是比较靠谱的。 于是&#xff0c;我就想到了&#xff0c;是不是可以在高中学校&#xff0c;设立一个“鸿鹄”奖学金&#xff1f; 这个奖学金怎么使用呢&#xff1f; 在每年9月份…

【Pandas】pandas DataFrame stack

Pandas2.2 DataFrame Reshaping sorting transposing 方法描述DataFrame.droplevel(level[, axis])用于**从 DataFrame 的索引&#xff08;行或列&#xff09;中删除指定层级&#xff08;level&#xff09;**的方法DataFrame.pivot(*, columns[, index, values])用于重塑 Dat…

Java 自动关闭资源语法糖 - try-with-resources

文章目录 Java 自动关闭资源语法糖 - try-with-resources前言优势1、自动资源管理2、处理多重资源3、异常处理更健壮4、适用条件 总结 Java 自动关闭资源语法糖 - try-with-resources 前言 日常开发中&#xff0c;我们经常会看到如下代码&#xff1a; try (InputStream is …

MyBatis中的动态SQL是什么?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis中的动态SQL是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis中的动态SQL是什么&#xff1f; 超硬核AI学习资料&#xff0c;现在永久免费了&#xff01; MyBatis中的动态SQL指的是根据不同的条件&#x…

【Java反射】如何新增对象中的属性,与JavaScript中的直接添加属性有什么区别?

问&#xff1a; Object obj new Object(); //获取一个类的class对象 Class<?> objClass Object.class; try { //通过newInstance方法创建一个新的属性 Field newField Field.class.newInstance(); newField.setAccessible(true); newField.set(obj, “index”); }ca…

java spring boot Swagger安装及使用

https://springdoc.org/ 可能原因分析 &#x1f50d; 原因 1&#xff1a;SpringFox 版本与 Spring Boot 版本不兼容 ❌ SpringFox 3.0.0 不完全兼容 Spring Boot 2.6 及更高版本&#xff0c;可能导致 NullPointerException。 Spring Boot 3.x 完全不支持 SpringFox&#xff0c…

电商云仓/前置仓的物流高效监控、管理、预警系统,快递鸟DMS

在电商行业蓬勃发展的当下&#xff0c;电商云仓和前置仓作为物流配送体系的关键环节&#xff0c;其高效运作直接影响着消费者体验与企业竞争力。快递鸟 DMS 物流交付管理平台&#xff0c;以其卓越的物流监控、管理及预警功能&#xff0c;成为电商企业优化云仓和前置仓物流管理的…