AtCoder Beginner Contest 375 C题 (python解)
Panasonic Programming Contest 2024(AtCoder Beginner Contest 375)C - Spiral Rotation(python解)**
原题链接:
[(https://atcoder.jp/contests/abc375/tasks/abc375_c)]
题目简述:
这道题要求对一个 N x N 的网格进行特定的螺旋旋转操作,而这个 N 总是偶数。在这里,网格中的每个单元格可以是黑色(用 # 表示)或白色(用 . 表示)。我们需要根据题目的描述,通过一系列的操作最终输出网格的颜色状态。
思路:
对于 i =1 到 N/2,在每个 i进行 (i +1) %4 次旋转。也就是说:i =1 时执行2 次旋转 - i =2 时执行3 次旋转 - i =3 时执行0 次旋转 - i =4 时执行1 次旋转 -依此类推……
旋转的定义是将相应的颜色值从一个位置移动到另一个位置。
python代码
def func(N, i, A):
r = N-1-i#计算当前层的右边界
for j in range(i,r):# 执行四个位置的颜色值交换,实现螺旋旋转
(A[j][r], A[r][N-1-j], A[N-1-j][i], A[i][j]) = (A[i][j], A[j][r], A[r][N-1-j], A[N-1-j][i])
def main():
N = int(input())
A = [list(input()) for _ in range(N)]#读取网格数据
for i in range(N//2):# 遍历每一个层次,从外层到内层(共 N/2 层)
for j in range((i+1)%4):# 根据当前层数 i计算旋转次数
func(N, i, A)
print("\n".join("".join(i) for i in A))# 输出最终的网格状态,将每一行转换为字符串,并用换行符连接
main()
自定义func(N, i, A) 函数:
i是当前层的左边界,r是右边界。
通过一个循环,将当前层的四个位置的颜色值进行交换,实现旋转。逻辑如下:
A[i][j](左上)交换到A[j][r](右上)A[j][r]交换到A[r][N-1-j](右下)A[r][N-1-j]交换到A[N-1-j][i](左下)A[N-1-j][i]交换到A[i][j](左上)
最后进行复杂度分析:
每一层的旋转操作是 O(N/2),因为每层的旋转交换只涉及该层的元素。
# 祝大家ACCCCCCCCC*
AtCoder Beginner Contest 375 C题 (python解)的更多相关文章
- AtCoder Beginner Contest 068 ABCD题
A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 069 ABCD题
题目链接:http://abc069.contest.atcoder.jp/assignments A - K-City Time limit : 2sec / Memory limit : 256M ...
- AtCoder Beginner Contest 050 ABC题
A - Addition and Subtraction Easy Time limit : 2sec / Memory limit : 256MB Score : 100 points Proble ...
- AtCoder Beginner Contest 070 ABCD题
题目链接:http://abc070.contest.atcoder.jp/assignments A - Palindromic Number Time limit : 2sec / Memory ...
- AtCoder Beginner Contest 057 ABCD题
A - Remaining Time Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Dol ...
- AtCoder Beginner Contest 051 ABCD题
A - Haiku Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement As a New Yea ...
- AtCoder Beginner Contest 137 D题【贪心】
[题意]一共有N个任务和M天,一个人一天只能做一个任务,做完任务之后可以在这一天之后的(Ai-1)天拿到Bi的工资,问M天内最多可以拿到多少工资. 链接:https://atcoder.jp/cont ...
- AtCoder Beginner Contest 220部分题(G,H)题解
刚开始的时候被E题卡住了,不过发现是个数学题后就开始使劲推式子,幸运的是推出来了,之后的F题更是树形DP换根的模板吧,就草草的过了,看了一眼G,随便口胡了一下,赶紧打代码,毕竟时间不多了,最后也没打完 ...
- AtCoder Beginner Contest 215 F题题解
F - Dist Max 2 什么时候我才能突破\(F\)题的大关... 算了,不说了,看题. 简化题意:给定\(n\)个点的坐标,定义没两个点的距离为\(min(|x_i-x_j|,|y_i-y_j ...
随机推荐
- 记录一次实验室linux系统的GPU服务器死机故障的排查——Linux系统的Power States
实验室的ubuntu服务器不知怎么的突然又崩溃了,死机重启,然后查看日志,发现了下面的情况: 由于从其他的日志中知道是显卡的问题引起的死机,而这个显卡的地址正好是D9:00,这部分的日志就不给出了.结 ...
- sublime 快速生成html基础代码
一.快速生成HTML5的头部信息的步骤: 1.Ctrl + N,新建一个文档: 2.Ctrl + Shift + P,打开命令模式,再输入 sshtml 进行模糊匹配,将语法切换到html模式: 3. ...
- 控制台报IPV6问题的解决
IPv6问题调试 Burp Suite是不支持IPv6地址进行数据通信的,这时在cmd控制台里就会抛出如下异常 java.net.SocketException: Permission denied ...
- 02-canvas注意点
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- C# 菜单项添加复选标记
在网上查找都是说直接用菜单项的Checked属性, toolMenuItem.Checked=!toolMenuItem.Checked; 但是我用了也切换不过来. 有点晕菜了,我用的是vs2017. ...
- Windows 查看当前登录用户名
使用 PowerShell 输入 whoami,PowerShell 将以 hostname\username 的方式输出主机名和用户名: $ whoami hostname\username 使用 ...
- 【Appium】之自动化定位总结
一.同级定位时,先定位上级 我想定位[必填]框,我先定位[姓名]的同一个上级 self.driver.find_element(MobileBy.XPATH,"//*[contains(@t ...
- 【YashanDB知识库】v$instance视图中实例角色含义不明确
[标题]v$instance视图中实例角色含义不明确 [问题分类]文档问题 [关键词]YashanDB, v$instance, 实例角色 [问题描述]v$instance视图中实例角色(如MASTE ...
- C++创建与调用dll动态链接库(MinGW64 Dev-C++)
本文使用的是dev-c++,如果涉及到VC++中不一样的操作,也会适当进行区分. 项目一:创建DLL 1.创建一个DLL类型的项目,当前命名为dlltest,并选择合适的路径进行保存. 2.在生成的 ...
- 使用Windows API 编写按行分配的计算矩阵向量相乘的并行程序
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程题,居然还涉及到多线程了,而且是调用Windows接口函数写多线程.虽然学汇编的时候有所了解,但毕竟没尝试过,思来想去,写出了下面的蹩脚代码,不 ...