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解)的更多相关文章

  1. AtCoder Beginner Contest 068 ABCD题

    A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...

  2. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  3. AtCoder Beginner Contest 069 ABCD题

    题目链接:http://abc069.contest.atcoder.jp/assignments A - K-City Time limit : 2sec / Memory limit : 256M ...

  4. AtCoder Beginner Contest 050 ABC题

    A - Addition and Subtraction Easy Time limit : 2sec / Memory limit : 256MB Score : 100 points Proble ...

  5. AtCoder Beginner Contest 070 ABCD题

    题目链接:http://abc070.contest.atcoder.jp/assignments A - Palindromic Number Time limit : 2sec / Memory ...

  6. AtCoder Beginner Contest 057 ABCD题

    A - Remaining Time Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Dol ...

  7. AtCoder Beginner Contest 051 ABCD题

    A - Haiku Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement As a New Yea ...

  8. AtCoder Beginner Contest 137 D题【贪心】

    [题意]一共有N个任务和M天,一个人一天只能做一个任务,做完任务之后可以在这一天之后的(Ai-1)天拿到Bi的工资,问M天内最多可以拿到多少工资. 链接:https://atcoder.jp/cont ...

  9. AtCoder Beginner Contest 220部分题(G,H)题解

    刚开始的时候被E题卡住了,不过发现是个数学题后就开始使劲推式子,幸运的是推出来了,之后的F题更是树形DP换根的模板吧,就草草的过了,看了一眼G,随便口胡了一下,赶紧打代码,毕竟时间不多了,最后也没打完 ...

  10. AtCoder Beginner Contest 215 F题题解

    F - Dist Max 2 什么时候我才能突破\(F\)题的大关... 算了,不说了,看题. 简化题意:给定\(n\)个点的坐标,定义没两个点的距离为\(min(|x_i-x_j|,|y_i-y_j ...

随机推荐

  1. VcXsrv: 一个好用的Windows X11 Server

    windows10没有系统自带的X11服务器,使用了几款X11的windows下X11服务器软件后发现了一个好用的软件--VcXsrv. 下载地址: https://sourceforge.net/p ...

  2. Pytorch学习率更新

    如需了解示例完整代码及其后续内容请访问: https://www.emperinter.info/2020/08/01/learning-rate-in-pytorch/ 缘由 自己在尝试了官方的代码 ...

  3. 讲师招募 | Apache SeaTunnel Meetup等你来秀!

    2024年第三季度已经悄然开启,猛回头才发现今年的时日竟然已经过半!这半年又是在忙忙碌碌中度过,好在看着社区发展年中汇总的一串串数字,似乎都在预示着社区将在一条正确的轨道上,朝着好的方向继续发展.但又 ...

  4. echarts x轴下绘制表

    效果图: 把下面代码复制到官网实例的js代码编辑中即可预览( 附连接:Examples - Apache ECharts) let map = { 销售单价: [2200.0,4000.9,700.0 ...

  5. vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple elements

    vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple ...

  6. OpenTelemetry 实战:gRPC 监控的实现原理

    前言 最近在给 opentelemetry-java-instrumentation 提交了一个 PR,是关于给 gRPC 新增四个 metrics: rpc.client.request.size: ...

  7. 万字长文带你窥探Spring中所有的扩展点

    写在前面 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片.Springboot更是封装了Spring,遵循约定大于配置,加上自动装配 ...

  8. 人形动画常见IK的处理

    Unity中常见人形动画IK的处理方式 本文将尝试仅使用Untiy内置的Animator来解决常见的几种运动所需的IK.也会给出核心功能的代码实现. 效果一览:b站视频 Unity中人形角色的IK I ...

  9. SQL Server – 基本操作 Table 和 Column

    前言 日常都是用 EF Core 来管理 Database, 偶尔也用 Management Studio, 就是很少手写 Command. 虽然网上一拉就有很多, 但是每次写单侧都要到处找还是挺烦的 ...

  10. Maven高级——继承与聚合

    继承与聚合 聚合 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合 聚合工程:通常是一个不具有业务功能的"空"工程(有且仅有一个pom文件) 作用:使用聚合工程可以将 ...