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 ...
随机推荐
- NVIDIA显卡的利用率“Volatile GPU Util"是什么???
相关: CPU端多进程/多线程调用CUDA是否可以加速??? 如何实现nvidia显卡的cuda的多kernel并发执行??? ==================================== ...
- 微信支付退款和退款结果查询接口简单实现(.Net 7.0)
〇.前言 相较于支付宝,微信支付对 .Net 的支持就没那么充分,官方没有提供 SDK. 但值得庆幸的是,在社区有大佬封装了 v3 版 .Net SDK. 原文链接:https://developer ...
- 代码随想录Day7
454.四数相加Ⅱ 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k ...
- 使用Jackson读取xml
找了不少,什么峰的,什么dn的参差不齐的资料,废话不少,问题是导入的包也没有.不多废话,看下面代码直接复用. package bean;import com.fasterxml.jackson.dat ...
- .NET MAUI 布局
先看一段代码的效果: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns=& ...
- 你还在手动操作仓库?这款 CLI 工具让你效率飙升300%!
前言 作为一名开发者,我经常会在 GitHub 和 Gitee 上 fork 各种项目.时间一长,这些仓库就会堆积如山,变成了"垃圾仓库".每次打开代码托管平台,看到那些不再需要的 ...
- 嵌入式数据库sqlite3【进阶篇】-子句和函数的使用,小白一文入门
在<嵌入式数据库sqlite3命令操作基础篇-增删改查,小白一文入门>一文中讲解了如何实现sqlite3的基本操作增删改查,本文介绍一些其他复杂一点的操作.比如where.order by ...
- 视频中ppt、代码、ubuntu环境请扫描下面二维码,回复:ubuntu,即可获得
历时4个多月,第一期Linux驱动视频录制完毕, 一共32期,现在全部同步到了B站. 如果你觉得视频对你有用,建议大家多多点赞,投投免费硬币, 算是对我辛苦的劳动的认可. 视频中ppt.代码.ubun ...
- Vite+Vue3 项目 华仔待办
此"华仔",不是彼"华仔",你懂的! 先来了个截图 紧跟着,实现步骤也来了 1. 安装 Node.js,终端运行 npm create vue@latest,项 ...
- 2024DASCTF
DASCTF prese 一眼控制了平坦化,可以用d810梭一下 跟进一下main_crypto这个函数 主要是两部分,第一部分是生成一个256大小的数组,通过输入的长度和遍历生成的一个数组 第二部分 ...