AtCoder Beginner Contest 370 ABCD题详细题解(C++,Python)
前言:
本文为AtCoder Beginner Contest 370 ABCD题的详细题解,包含C++,Python语言描述,觉得有帮助或者写的不错可以点个赞
个人感觉D比C简单,C那里的字典序有点不理解, E应该是前缀和加dp,但是是dp不明白,等我明白了会更新的(好像拖了好多东西了)
目录
题A:
题目大意和解题思路:
代码(C++):
代码(Python):
题B:
题目大意和解题思路:
代码(C++):
代码(Python):
题C:
题目大意和解题思路:
代码(C++):
代码(Python):
题D:
题目大意和解题思路:
代码(C++):
代码(Python):
题A:
A - Raise Both Hands (atcoder.jp)
题目大意和解题思路:
如果只举起一只手,如果他想吃章鱼烧就输出Yes,如果他不想吃就输出No。如果他举起两只手或者一只手都不举,就输出Invalid
简单的if else判断
可以用三元运算符优化
代码(C++):
int main() {std::ios::sync_with_stdio(0);std::cin.tie(0);int a, b;std::cin >> a >> b;std::string res = (a == 1 && b == 0 ? "Yes" : a == 0 && b == 1 ? "No" : "Invalid");std::cout << res << "\n";
}
代码(Python):
def main():a, b = map(int, input().split())res = "Yes" if a == 1 and b == 0 else "No" if a == 0 and b == 1 else "Invalid"print(res)
题B:
B - Binary Alchemy (atcoder.jp)
题目大意和解题思路:
有N种元素,编号为1, 2, ..., N。
这些元素可以相互组合。当元素i和j组合时,如果i≥j,它们会变成元素A[i,j];如果i<j,它们会变成元素A[j,i]。
从元素1开始,按顺序将它与元素1, 2, ..., N组合。找出最终得到的元素。
题目意思其实很简单,就是最开始是1跟1比较,然后比较的数字大小决定了下一个坐标
比如示例一:
4 3 2 4 3 1 2 2 1 2 4
最开始1跟1比较,得到A11,也就是 3
然后3跟2比较,得到A32,也就是1
然后1跟3比较,得到A31,也就是3
最后3跟4比较,得到A43,也就是2
根据上面可以得到,大的坐标在前面,小的坐标在后面
然后可以模拟,输入的放入n + 1长度的二维数组,下标从1开始,然后答案定义为1,详细见代码:
代码(C++):
int main() {std::ios::sync_with_stdio(0);std::cin.tie(0);int n;std::cin >> n;std::vector<std::vector<int>> A(n + 1, std::vector<int> (n + 1));for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {std::cin >> A[i][j];}}//开始为1int res = 1;//依次跟1 到 n 进行比较 大的那一个为A的第一个下标for (int i = 1; i <= n; i++) {res = A[std::max(res, i)][std::min(res, i)];}std::cout << res << "\n";
}
代码(Python):
def main():n = int(input())A = [[0 for _ in range(n + 1)] for _ in range(n + 1)]for i in range(1, n + 1):row = list(map(int, input().split()))for j in range(1, i + 1):A[i][j] = row[j - 1]res = 1for i in range(1, n + 1):res = A[max(res, i)][min(res, i)]print(res)
题C:
C - Word Ladder (atcoder.jp)
题目大意和解题思路:
让 X 为一个空数组,重复以下操作直到 S 等于 T:
- 改变 S 中的一个字符,并将改变后的 S 添加到 X 的末尾。
找出通过这种方式得到的元素数量最少的字符串数组 X。如果有多个这样的最小元素数量的数组,找出其中字典序最小的一个。
什么是字符串数组的字典序?
长度为 N 的字符串 S=S₁S₂...Sₙ 在字典序上小于长度为 N 的字符串 T=T₁T₂...Tₙ,如果存在一个整数 1≤i≤N,满足以下两个条件:
- S₁S₂...Sᵢ₋₁ = T₁T₂...Tᵢ₋₁
- Sᵢ 在字母表中比 Tᵢ 更早出现。
具有 M 个元素的字符串数组 X=(X₁,X₂,...,Xₘ) 在字典序上小于具有 M 个元素的字符串数组 Y=(Y₁,Y₂,...,Yₘ),如果存在一个整数 1≤j≤M,满足以下两个条件:
- (X₁,X₂,...,Xⱼ₋₁) = (Y₁,Y₂,...,Yⱼ₋₁)
- Xⱼ 在字典序上小于 Yⱼ。
题目的意思就是把s变成t,一次只能变换一个字母,然后每次变换后把变换的字符串放入x中
并且使得x的字符串尽可能小
就是把缩小的变换都放在前面,增大的变换都放在后面,当前也不知道为啥卡这么久,脑子发昏了
代码(C++):
int main() {std::ios::sync_with_stdio(0);std::cin.tie(0);std::string s, t;std::cin >> s;std::cin >> t;int n = s.size();std::vector<std::string> A;for (int i = 0; i < n; i++) {if (s[i] > t[i]) {s[i] = t[i];A.push_back(s);}}for (int i = n - 1; i >= 0; i--) {if (s[i] < t[i]) {s[i] = t[i];A.push_back(s);}}std::cout << A.size() << "\n";for (auto a : A) {std::cout << a << "\n";}
}
代码(Python):
def main():s = list(input().strip())t = list(input().strip())n = len(s)A = []for i in range(n):if s[i] > t[i]:s[i] = t[i]A.append(''.join(s))for i in range(n - 1, -1, -1):if s[i] < t[i]:s[i] = t[i]A.append(''.join(s))print(len(A))for a in A:print(a)
题D:
D - Cross Explosion (atcoder.jp)
题目大意和解题思路:
题目意思就是说,有一个 H 行 W 列的网格图,在每个单元格里面都有一个墙,
然后放炸弹,如果这个单元格有墙,那就炸
如果没有,那就同时摧毁从该位置向上、下、左、右看到的第一面墙
根据题目的意思很容易得到暴力模拟代码:
超时代码:
int main() {std::ios::sync_with_stdio(0);std::cin.tie(0);int H, W, Q;std::cin >> H >> W >> Q;std::vector<std::vector<bool>> A(H, std::vector<bool>(W, true));for (int q = 0; q < Q; q++) {int r, c;std::cin >> r >> c;r--; c--;if (A[r][c]) {A[r][c] = false;continue;}for (int i = r - 1; i >= 0; i--) {if (A[i][c]) {A[i][c] = false;break;}}for (int i = r + 1; i < H; i++) {if (A[i][c]) {A[i][c] = false;break;}}for (int j = c + 1; j < W; j++) {if (A[r][j]) {A[r][j] = false;break;}}for (int j = c - 1; j >= 0; j--) {if (A[r][j]) {A[r][j] = false;break;}}}int res = 0;for (int i = 0; i < H; i++) {for (int j = 0; j < W; j++) {if (A[i][j]) {res++;}}}std::cout << res << "\n";
}
上面代码复杂度为O(H * W + Q * (H + W))
而题目给的是10^5,肯定会超时的
可以用set进行优化,使用四个集合存储每一行和每一列中墙壁的位置
由于是找从该位置向上、下、左、右看到的第一面墙,那么可以想到二分查找
代码(C++):
int main() {std::ios::sync_with_stdio(0);std::cin.tie(0);int H, W, Q;std::cin >> H >> W >> Q;// 使用四个集合存储每一行和每一列中墙壁的位置std::vector<std::set<int>> rows(H), cols(W);for (int i = 0; i < H; i++) {for (int j = 0; j < W; j++) {rows[i].insert(j);cols[j].insert(i);}}// 定义remove_wall,方便操作auto remove_wall = [&](int r, int c) {rows[r].erase(c);cols[c].erase(r);};for (int q = 0; q < Q; q++) {int r, c;std::cin >> r >> c;r--; c--;if (rows[r].count(c)) {remove_wall(r, c);continue;}auto it = rows[r].lower_bound(c);if (it != rows[r].begin()) {int j = *(--it);remove_wall(r, j);}it = rows[r].upper_bound(c);if (it != rows[r].end()) {int j = *it;remove_wall(r, j);}it = cols[c].lower_bound(r);if (it != cols[c].begin()) {int i = *(--it);remove_wall(i, c);}it = cols[c].upper_bound(r);if (it != cols[c].end()) {int i = *it;remove_wall(i, c);}}int res = 0;for (int i = 0; i < H; i++) {res += rows[i].size();}std::cout << res << "\n";return 0;
}
相关文章:
AtCoder Beginner Contest 370 ABCD题详细题解(C++,Python)
前言: 本文为AtCoder Beginner Contest 370 ABCD题的详细题解,包含C,Python语言描述,觉得有帮助或者写的不错可以点个赞 个人感觉D比C简单,C那里的字典序有点不理解, E应该是前缀和加dp,但是是dp不明白,等我明白了会更…...
斯坦福研究人员探讨大型语言模型在社交网络生成中的应用及其在政治同质性上的偏见
社交网络生成在许多领域有着广泛的应用,比如流行病建模、社交媒体模拟以及理解社交现象如两极化等。当由于隐私问题或其他限制无法直接观察真实网络时,创建逼真的社交网络就显得尤为重要。这些生成的网络对于在这些情况下准确建模互动和预测结果至关重要…...

一招教你找到Facebook广告的最佳发帖时间
在社交媒体上做广告时,时机是至关重要的。有时候你投放的广告参与度低,很有可能是因为你没有在适当的时机投放广告。这篇文章会教你如何找到适合自己的广告投放时间,如果你感兴趣的话,就继续看下去吧! 首先࿰…...

【数据库】MySQL-基础篇-多表查询
专栏文章索引:数据库 有问题可私聊:QQ:3375119339 目录 一、多表关系 1.一对多 2.多对多 3.一对一 二、多表查询概述 1.数据准备 2.概述 3.分类 三、内连接 1.隐式内连接 2.显式内连接 3.案例 四、外连接 1.左外连接 2.右外连…...

MongoDB事务机制
事务机制 1.事务概念 在对数据的操作的过程中,涉及到一连串的操作,这些操作如果失败,会导致我们的数据部分变化了,部分没变化。这个过程就好比如你去吃早餐,你点完餐了,并且吃完早餐了,没付钱你…...

大模型 LLM(Large Language Models)如今十分火爆,对于初入此领域的新人小白来说,应该如何入门 LLM 呢?是否有值得推荐的入门教程呢?
前言 很明显,这是一个偏学术方向的指南要求,所以我会把整个LLM应用的从数学到编程语言,从框架到常用模型的学习方法,给你捋一个通透。也可能是不爱学习的劝退文。 通常要达到熟练的进行LLM相关的学术研究与开发,至少…...
Python实现模糊逻辑算法
博客目录 引言 什么是模糊逻辑?模糊逻辑的应用场景模糊逻辑的基本思想 模糊逻辑的原理 模糊集合与隶属函数模糊推理系统(FIS)模糊规则和推理过程 Python实现模糊逻辑算法 面向对象的设计思路代码实现示例与解释 模糊逻辑算法应用实例&…...

MATLAB、FPGA、STM32中调用FFT计算频率、幅值及相位差
系列文章目录 文章目录 系列文章目录前言MATLABSTM32调用DSPSTM32中实现FFT关于初相位 FPGA 前言 最近在学习如何在STM32中调用FFT MATLAB 首先对FFT进行一下说明,我们输入N个点的数据到FFT中,FFT会返回N个点的数据,这些数据都是复数&#…...

基于SSM的医院药品库存系统的设计与实现---附源码76620
摘要 医院药品库存管理是医院管理的重要组成部分,对于保障医疗服务的质量和效率具有重要意义。传统的手工管理方式已经无法满足药品库存管理的需求,因此建立一个医院药品库存系统具有重要的实践价值。 使用Java语言开发医院药品库存系统可以兼容不同操作…...
Jupyter管理内核命令
1.显示有哪些内核 jupyter kernelspec list2.删除某个内核 jupyter kernelspec remove xxx3.添加某个内核 先激活环境 conda activate test_env然后安装ipykernel包 pip install ipykernel在虚拟环境中安装ipykernel包 python -m ipykernel install --name test_env安装过…...

简单分享-获取.txt文件内数据 文件内数据逗号分隔 分隔符 C语言
简单分享-获取.txt文件内数据 文件内数据逗号分隔 分隔符 C语言 数据存储到文件中,把文件数据读取到数组,方便数据处理。 # include <stdio.h> # include <stdlib.h> # include <string.h>#define DATANUM 307200 //数组个数 int ma…...

从0开始手把手带你入门Vue3
前言 本文并非标题党,而是实实在在的硬核文章,如果有想要学习Vue3的网友,可以大致的浏览一下本文,总体来说本篇博客涵盖了Vue3中绝大部分内容,包含常用的CompositionAPI(组合式API)、其它CompositionAPI以及一些新的特…...

C# USB通信技术(通过LibUsbDotNet库)
文章目录 1.下载LibusbDotNet库2.引入命名空间3. 实例化USB设备4.发送数据5.关闭连接 1.下载LibusbDotNet库 右击项目选择管理NuGet程序包在弹出的界面中搜索LibusbDotNet,然后下载安装。 2.引入命名空间 using LibUsbDotNet; using LibUsbDotNet.Main;3. 实例化…...
常用Java API
1 字符串处理 1.1 String 类 String 类是 Java 中不可变的字符序列。它提供了以下常用方法: length():返回字符串的长度。 charAt(index):返回指定索引处的字符。 substring(startIndex, endIndex):返回从 startIndex 到 endI…...

使用opencv优化图片(画面变清晰)
文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强…...

Java 回顾方法的定义
一、方法的定义 1.修饰符(public static…)详见博客【Java 方法的定义】 2.返回值(int, double, char[],…., void)详见博客【Java 方法的定义】 3. break:跳出switch 结束循环,详…...

网络安全产品认证证书大全(持续更新...)
文章目录 一、引言二、《计算机信息系统安全专用产品销售许可证》2.1 背景2.2 法律法规依据2.3 检测机构2.4 检测依据2.5 认证流程2.6 证书样本 三、《网络关键设备和网络安全专用产品安全认证证书》3.1 背景3.2 法律法规依据3.3 检测机构3.4安全认证和安全检测依据标准3.5 认证…...

win10 安装多个版本的python
1,安装python3.9 和python3.10 2, 安装完之后分别打开两个版本的Python的安装目录(第一层目录),把pythonw.exe分别重命名为pythonw_39.exe和pythonw_310.exe,把python.exe复制一份,并分别重命名为python_…...
【ORACLE】数据备份
Oracle数据库备份是确保数据安全和可靠性的重要环节。Oracle提供了多种备份方法,包括冷备份、热备份、逻辑备份(如使用expdp和impdp)以及使用RMAN(Recovery Manager)进行物理备份。 冷备份:在数据库关闭的状…...

[Golang] goroutine
[Golang] goroutine 文章目录 [Golang] goroutine并发进程和线程协程 goroutine概述如何使用goroutine 并发 进程和线程 谈到并发,大多都离不开进程和线程,什么是进程、什么是线程? 进程可以这样理解:进程就是运行着的程序&…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...

PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...