AtCoder Beginner Contest竞赛题解 | AtCoder Beginner Contest 436

news/2026/1/18 10:48:58/文章来源:https://www.cnblogs.com/guolianggsta/p/19497958

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:AtCoder Beginner Contest竞赛题解 | 汇总


A - o-padding

【题目来源】

洛谷:[AT_abc436_a ABC436A] o-padding - 洛谷

【题目描述】

You are given an integer \(N\) and a string \(S\) consisting of lowercase English letters with length less than \(N\) .
给定一个整数 \(N\) 和一个由小写英文字母组成的字符串 \(S\),其中 \(S\) 的长度小于 \(N\)

Print the string obtained by repeatedly adding the lowercase English letter o to the beginning of \(S\) until its length becomes \(N\) .
输出通过重复在 \(S\) 的开头添加小写英文字母 o 直至其长度达到 \(N\) 所得的字符串。

【输入】

The input is given from Standard Input in the following format:

$ N $ $ S $

【输出】

Print the answer.

【输入样例】

5
abc

【输出样例】

ooabc

【算法标签】

《洛谷 AT_abc436_a o-padding》 #模拟# #字符串#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int n;          // 总长度
string s;       // 输入的字符串int main()
{// 输入总长度n和字符串scin >> n >> s;// 在字符串前面补充字符'o',使总长度达到n// 需要补充的'o'个数为:n - s.size()for (int i = 1; i <= n - s.size(); i++){cout << "o";  // 输出字符'o'}// 输出原始字符串scout << s << endl;return 0;
}

【运行结果】

5
abc
ooabc

B - Magic Square

【题目来源】

洛谷:[AT_abc436_b ABC436B] Magic Square - 洛谷

【题目描述】

You are given an odd number \(N\) that is at least \(3\) .
给定一个至少为 \(3\) 的奇数 \(N\)

There is a grid with \(N\) rows and \(N\) columns, where all cells are initially empty. Now, you will write integers in each cell of this grid according to the following procedure. Let \((i,j)\) denote the cell at the \((i+1)\) -th row from the top and \((j+1)\) -th column from the left ( \(0\leq i<N, 0\leq j<N\) ).
有一个 \(N\)\(N\) 列的网格,其中所有单元格初始为空。现在,你将按照以下步骤在该网格的每个单元格中写入整数。用 \((i, j)\) 表示从上往下第 \((i+1)\) 行、从左往右第 \((j+1)\) 列的单元格 (\(0\leq i<N, 0\leq j<N\))。

  1. Write $ 1 $ in cell \((0,\frac{N-1}{2})\) .
    在单元格 \((0,\frac{N-1}{2})\) 中写入 \(1\)

  2. Repeat the following operation \(N^2-1\) times:
    重复以下操作 \(N^2-1\) 次:

    • Let \((r,c)\) be the cell where an integer was written last time, and \(k\) be the integer written. If cell \(((r-1) \bmod N, (c+1) \bmod N)\) is empty, write \(k+1\) in that cell; otherwise, write \(k+1\) in cell \(((r+1) \bmod N,c)\) . Here, \(x \bmod N\) denotes the remainder when \(x\) is divided by \(N\) .
      \((r, c)\) 表示上次写入整数的单元格,\(k\) 表示写入的整数。若单元格 \(((r-1) \bmod N, (c+1) \bmod N)\) 为空,则在该单元格中写入 \(k+1\);否则,在单元格 \(((r+1) \bmod N,c)\) 中写入 \(k+1\)。此处,\(x \bmod N\) 表示 \(x\) 除以 \(N\) 的余数。

Find the integer that will be written in each cell in this procedure. It can be proved that each cell will have an integer written in it exactly once.
求在此过程中每个单元格将被写入的整数。可以证明,每个单元格中将被写入恰好一个整数。

【输入】

The input is given from Standard Input in the following format:

\(N\)

【输出】

Let \(a_{i,j}\) be the integer written in cell \((i,j)\) , and print it in the following format:

\(a_{0,0}\) \(a_{0,1}\) \(\dots\) \(a_{0,N-1}\) \(\vdots\) \(a_{N-1,0}\) \(a_{N-1,1}\) \(\dots\) \(a_{N-1,N-1}\)

【输入样例】

3

【输出样例】

8 1 6
3 5 7
4 9 2

【算法标签】

《洛谷 AT_abc436_b Magic Square》 #模拟# #枚举#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 105;  // 最大矩阵大小
int n;              // 幻方大小(奇数)
int a[N][N];        // 幻方矩阵int main()
{// 输入幻方大小n(应为奇数)cin >> n;// 1. 初始化:将1放在第一行的中间列a[0][(n - 1) / 2] = 1;int k = 1;  // 当前已放置的数字// 当前位置:i行,j列int i = 0, j = (n - 1) / 2;// 2. 放置剩余的n*n-1个数字while (k <= n * n - 1){// 计算右上角的位置(循环处理)int next_i = (i - 1 + n) % n;  // 上一行int next_j = (j + 1) % n;      // 右一列// 如果右上角位置为空if (a[next_i][next_j] == 0){// 将下一个数字放在右上角a[next_i][next_j] = k + 1;// 更新当前位置i = next_i;j = next_j;}else{// 如果右上角被占用,放在正下方a[(i + 1) % n][j] = k + 1;// 更新当前位置i = (i + 1) % n;  // 下一行j = j;            // 同一列}k++;  // 已放置数字数量加1// 调试输出// cout << "i j " << i << " " << j << endl;}// 3. 输出幻方for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){cout << a[i][j] << " ";}cout << endl;}return 0;
}

【运行结果】

3
8 1 6
3 5 7
4 9 2

C - 2x2 Placing

【题目来源】

洛谷:[AT_abc436_c ABC436C] 2x2 Placing - 洛谷

【题目描述】

There is a grid with \(N\) rows and \(N\) columns. Let \((i,j)\) denote the cell at the \(i\) -th row from the top and \(j\) -th column from the left. Initially, nothing is placed on the grid.
有一个 \(N\)\(N\) 列的网格。用 \((i, j)\) 表示从上往下第 \(i\) 行、从左往右第 \(j\) 列的单元格。初始时,网格上未放置任何物品。

You will now perform \(M\) operations. The \(i\) -th operation \((1\leq i\leq M)\) is as follows:
现在你将执行 \(M\) 次操作。第 \(i\) 次操作 \((1\leq i\leq M)\) 如下:

  • Place a block that occupies a \(2 \times 2\) region with cell \((R_i,C_i)\) as the top-left corner on the grid if and only if its position does not overlap with any other blocks already placed. More precisely, for the set of cells \(S=\lbrace (R_i,C_i),(R_i+1,C_i),(R_i,C_i+1),(R_i+1,C_i+1)\rbrace\) , if there exists a block already placed on the grid that occupies any cell in $ S $ , do nothing; otherwise, place a block that occupies all four cells in $ S $ .
    当且仅当该位置与已放置的任何其他方块不重叠时,将一个占据 \(2 \times 2\) 区域且以单元格 \((R_i,C_i)\) 为左上角的方块放置在网格上。更准确地说,对于单元格集合 \(S=\lbrace (R_i,C_i),(R_i+1,C_i),(R_i,C_i+1),(R_i+1,C_i+1)\rbrace\),若网格上已存在占据 \(S\) 中任一单元格的方块,则什么也不做;否则,放置一个占据 \(S\) 中全部四个单元格的方块。

After performing all operations, find how many blocks are placed on the grid.
在执行完所有操作后,求网格上放置的方块数量。

【输入】

The input is given from Standard Input in the following format:

\(N\) \(M\) \(R_1\) \(C_1\) \(R_2\) \(C_2\) \(\vdots\) \(R_M\) \(C_M\)

【输出】

Print the answer.

【输入样例】

4 3
1 1
2 2
2 3

【输出样例】

2

【算法标签】

《洛谷 AT_abc436_c 2x2 Placing》 #模拟#

【代码详解】

#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> PII;  // 定义坐标对类型
const int N = 200005;        // 最大点数(未使用)int n, m;       // n: 坐标范围?, m: 操作次数
int ans;        // 答案:不重叠的2×2正方形数量
map<PII, int> mp;  // 记录每个点是否被占用,1表示被占用int main()
{// 输入n和mcin >> n >> m;// 处理m次操作for (int i = 1; i <= m; i++){int x, y;cin >> x >> y;  // 输入2×2正方形的左上角坐标// 检查以(x,y)为左上角的2×2正方形是否与已存在的正方形重叠// 一个2×2正方形包含4个点:(x,y), (x,y+1), (x+1,y), (x+1,y+1)// 如果这4个点都没有被占用,说明可以放置新的正方形if (mp[{x, y}] != 1 &&        // 左上角mp[{x, y + 1}] != 1 &&    // 右上角mp[{x + 1, y}] != 1 &&    // 左下角mp[{x + 1, y + 1}] != 1)  // 右下角{// 可以放置新正方形ans++;  // 增加计数// 标记这4个点为已占用mp[{x, y}] = 1;mp[{x, y + 1}] = 1;mp[{x + 1, y}] = 1;mp[{x + 1, y + 1}] = 1;// 注意:这里没有检查坐标是否越界// 假设输入的坐标都在有效范围内}}// 输出不重叠的正方形数量cout << ans << endl;return 0;
}

【运行结果】

4 3
1 1
2 2
2 3
2

D - Teleport Maze

【题目来源】

洛谷:[AT_abc436_d ABC436D] Teleport Maze - 洛谷

【题目描述】

There is a maze consisting of a grid with \(H\) rows and \(W\) columns. Let \((i,j)\) denote the cell at the \(i\) -th row from the top and \(j\) -th column from the left. The type of cell \((i,j)\) is given as a character \(S_{i,j}\) , where each character has the following meaning:

  • . : Empty cell
  • # : Obstacle cell
  • Lowercase English letter (a - z): Warp cell

In the maze, you can perform the following two types of actions any number of times in any order:

  • Walk: Move from the current cell to a cell that is one cell away in one of the four directions (up, down, left, right). However, you cannot move to an obstacle cell or outside the grid.
  • Warp: When you are at a warp cell, move to any warp cell with the same character written on it.

Determine whether it is possible to move from cell \((1,1)\) to cell \((H,W)\) , and if possible, find the minimum total number of actions required.

【输入】

The input is given from Standard Input in the following format:

\(H\) \(W\) \(S_{1,1}S_{1,2}\dots S_{1,W}\) \(\vdots\) \(S_{H,1}S_{H,2}\dots S_{H,W}\)

【输出】

If it is possible to move from cell \((1,1)\) to cell \((H,W)\) , print the minimum total number of actions required; otherwise, print -1.

【输入样例】

3 4
..a.
####
ba#b

【输出样例】

5

【算法标签】

《洛谷 AT_abc436_d Teleport Maze》 #广度优先搜索BFS#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 1005;  // 最大网格大小
typedef pair<int, int> PII;  // 坐标对int h, w;            // 网格高度和宽度
char a[N][N];        // 网格内容
int dist[N][N];      // 从起点到每个点的最短距离
bool vis[N][N];      // 访问标记(未使用)
int dx[4] = {-1, 1, 0, 0};  // 上下左右方向
int dy[4] = {0, 0, -1, 1};
vector<PII> ve[30];  // 存储每种小写字母的位置
bool st[30];         // 标记每种字母是否已使用过传送功能/*** BFS求从(1,1)到(h,w)的最短路径* 支持普通移动和特殊传送*/
void bfs()
{queue<PII> q;q.push({1, 1});        // 起点dist[1][1] = 0;        // 起点距离为0while (!q.empty()){int x = q.front().first, y = q.front().second; q.pop();// 如果当前格是小写字母,且该字母的传送功能未使用过if (islower(a[x][y]) && st[a[x][y] - 'a'] == false){// 遍历该字母对应的所有传送点for (auto [x2, y2] : ve[a[x][y] - 'a']){// 如果目标点未访问过if (dist[x2][y2] == -1){// 距离为当前位置距离+1dist[x2][y2] = dist[x][y] + 1;// 加入队列q.push({x2, y2});}}// 标记该字母的传送功能已使用st[a[x][y] - 'a'] = true;}// 四个方向普通移动for (int i = 0; i < 4; i++){int nx = x + dx[i], ny = y + dy[i];// 边界检查if (nx < 1 || nx > h || ny < 1 || ny > w)continue;// 障碍物检查if (a[nx][ny] == '#')continue;// 已访问检查if (dist[nx][ny] != -1)continue;// 入队并更新距离q.push({nx, ny});dist[nx][ny] = dist[x][y] + 1;}}
}int main()
{// 输入网格大小cin >> h >> w;// 初始化距离为-1(表示未访问)memset(dist, -1, sizeof(dist));// 读入网格并预处理字母位置for (int i = 1; i <= h; i++){for (int j = 1; j <= w; j++){cin >> a[i][j];// 如果是小写字母,记录其位置if (islower(a[i][j])){ve[a[i][j] - 'a'].push_back({i, j});}}}// BFS求最短路径bfs();// 输出结果if (dist[h][w] == -1){cout << -1 << endl;  // 不可达}else{cout << dist[h][w] << endl;  // 最短距离}return 0;
}

【运行结果】

3 4
..a.
####
ba#b
5

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

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

相关文章

10338_基于SSM的在线小说阅读网站

1、项目包含 项目源码、项目文档、数据库脚本、软件工具等资料; 带你从零开始部署运行本套系统。 2、项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息…

AI 写论文哪个软件最好?实测虎贲等考 AI:毕业论文通关的效率神器

毕业季的论文战场&#xff0c;“AI 写论文哪个软件最好” 的灵魂拷问&#xff0c;总能在各大高校的互助群里刷屏。不少同学踩坑无数&#xff1a;有的工具生成内容空洞无物&#xff0c;有的文献引用漏洞百出&#xff0c;有的查重结果与学校标准脱节。作为深耕论文写作科普的测评…

计算机毕业设计hadoop+spark+hive美食推荐系统 美食可视化 大数据毕业设计(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 技术范围&#xff1a;Sprin…

救命神器9个AI论文平台,专科生毕业论文轻松搞定!

救命神器9个AI论文平台&#xff0c;专科生毕业论文轻松搞定&#xff01; 论文写作的救星&#xff0c;AI 工具如何改变你的学习方式 在当今这个信息爆炸的时代&#xff0c;论文写作早已不再是单纯的文字堆砌&#xff0c;而是一场对逻辑、语言和知识整合能力的全面考验。尤其是对…

Python+vue3+django 微信小程序-美食推荐系统 共享菜谱管理系统

目录 系统概述核心功能技术实现应用价值 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 基于PythonVue3Django的微信小程序美食推荐与共享菜谱管理系统&#xff0c;旨在为用户提…

GPEN模型离线部署方案:无网络环境下的稳定运行

GPEN模型离线部署方案&#xff1a;无网络环境下的稳定运行 1. 镜像环境说明 本镜像基于 GPEN人像修复增强模型 构建&#xff0c;预装了完整的深度学习开发环境&#xff0c;集成了推理及评估所需的所有依赖&#xff0c;支持在无网络连接的环境下实现开箱即用的模型部署与推理。…

韓愈《原道》:“博愛之謂仁”

Eigentlich ist es viel lnger als die amerikanische Sprache, sodass man es nicht einmal ignorieren kann.

新时代轨道交通的发展趋势、挑战与战略路径

目录 一、引言 二、轨道交通未来核心发展趋势 &#xff08;一&#xff09;“四网融合”纵深推进&#xff0c;构建一体化交通网络 &#xff08;二&#xff09;智能化技术深度赋能&#xff0c;重构运营维护体系 &#xff08;三&#xff09;绿色化转型加速&#xff0c;践行“双…

分析2026年全国隔音板制造厂排名,哪家更值得选有答案 - 工业品牌热点

2026年噪声污染治理需求持续攀升,专业隔音板制造与声学解决方案已成为建筑、工业、商业等领域改善声环境、提升空间品质的核心支撑。无论是住宅隔墙的低频噪音阻隔、工业车间的设备降噪,还是商业空间的声学优化,优质…

GLM-ASR-Nano-2512实战:5分钟搭建多语言语音识别系统

GLM-ASR-Nano-2512实战&#xff1a;5分钟搭建多语言语音识别系统 1. 引言 1.1 业务场景描述 在智能客服、会议记录、语音转写等实际应用中&#xff0c;快速部署一个高精度、低延迟的语音识别&#xff08;ASR&#xff09;系统是关键需求。传统方案依赖云服务API&#xff0c;存…

Python+vue3+djangod的KTV包厢服务管理系统

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 该系统基于PythonDjangoVue3技术栈开发&#xff0c;旨在实现KTV包厢服务的数字化管理&#xff0c;提升运营效率与用户体验。后…

(217页PPT)基于数据运营的新型某省市实践与思考(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/89525621 资料解读&#xff1a;基于数据运营的新型某省市实践与思考 详细资料请看本解读文章的最后内容 本文围绕基于数据运营的新型某省市…

(219页PPT)制造集团企业供应链整体方案含数字化供应商关系管理(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/88898276 资料解读&#xff1a;&#xff08;219 页 PPT&#xff09;制造集团企业供应链整体方案含数字化供应商关系管理 P235 详细资料请看本…

leetcode 3047

3047: 求交集区域内的最大正方形面积bottomLeft[i] 和 topRight[i] 分别代表第 i 个矩形的 左下角 和 右上角 坐标。如果两个矩形有交集&#xff0c;那么交集也是矩形。求出这个交集矩形的左下角和右上角&#xff0c;就可以算出交集矩形的长和宽。左下角横坐标&#xff1a;两个…

Python+vue3+django个人健康管理系统的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着信息技术的快速发展&#xff0c;个人健康管理系统的需求日益增长。该系统基于Python、Vue3和Django框架&#xff0c;旨在为…

学术探险家的秘密武器:书匠策AI如何改写本科论文的“生存法则”

在学术的荒野中&#xff0c;本科生常像手持地图却迷路的探险家——选题撞车、文献迷航、逻辑混乱、语言生硬……这些问题如同荆棘&#xff0c;让无数人困在“新手村”。但如今&#xff0c;一款名为书匠策AI的智能工具正以“学术探险装备库”的姿态&#xff0c;将论文写作从“地…

【Python色彩科学】修图总有“色差”?揭秘 AI 如何利用“直方图匹配”实现 100% 色彩还原

Python 色彩科学 直方图匹配 图像融合 计算机视觉 跨境电商摘要在电商修图中&#xff0c;最考验算法功底的不是“把字擦掉”&#xff0c;而是擦掉之后如何让新生成的像素与原图保持色彩一致&#xff08;Color Consistency&#xff09;。普通的 AI Inpainting 模型往往会生成偏灰…

Qwen-Coder vs IQuest-Coder-V1:BigCodeBench性能对比部署案例

Qwen-Coder vs IQuest-Coder-V1&#xff1a;BigCodeBench性能对比部署案例 1. 背景与选型动机 在当前大模型驱动的软件工程自动化浪潮中&#xff0c;代码大语言模型&#xff08;Code LLMs&#xff09;已成为提升开发效率、实现智能编程辅助的核心技术。随着应用场景从简单的代…

学术探险家指南:用书匠策AI解锁本科论文写作的“隐藏地图”

对于许多本科生而言&#xff0c;论文写作像一场充满未知的“学术探险”——选题撞车、文献迷航、逻辑混乱、语言生硬……这些问题如同隐藏的陷阱&#xff0c;让新手学者屡屡受挫。但如今&#xff0c;一款名为书匠策AI的智能工具正以“学术探险装备库”的姿态&#xff0c;将论文…

Python+vue3+django宠物领养系统 原生微信小程序

目录系统概述技术架构核心功能安全与扩展性应用价值开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 PythonVue3Django宠物领养系统结合原生微信小程序&#xff0c;构建了一个高效、…