当前位置: 首页 > news >正文

CF958A1 Death Stars (easy) 解题报告

题目传送门

题目大意

给出两张只含有 XO 的表,问是否能通过旋转和翻转把其中一个变为另一个。

解题思路

这题一看就是一道大水题!!!

算法:模拟所有情况。

首先我们先画出一张简单的表模拟一下(设两张表分别为 \(A\)\(B\)):

初始的 \(A\)

\(A\) \(B\)
\(C\) \(D\)

这里一共有 \(8\) 种对 \(A\) 操作后的表:

顺时针:\(ABCD\)(四种)

逆时针:\(DCBA\)(四种)

Details:

  1. 不进行改变
\(A\) \(B\)
\(C\) \(D\)

对应布尔判断式 \(A_{i,j}=B_{i,j}\)\(A\) 操作后对应 \(B\) 的位置);

  1. 竖直翻转一次
\(C\) \(D\)
\(A\) \(B\)

对应布尔判断式 \(A_{i,j}=B_{n-i+1,j}\)

  1. 水平翻转一次
\(B\) \(A\)
\(D\) \(C\)

对应布尔判断式 \(A_{i,j}=B_{i,n-j+1}\)

  1. 水平翻转一次再竖直翻转一次
\(D\) \(C\)
\(B\) \(A\)

对应布尔判断式 \(A_{i,j}=B_{n-i+1,n-j+1}\)

  1. 左旋 \(90^{\circ}\) 再竖直翻转一次
\(A\) \(C\)
\(B\) \(D\)

对应布尔判断式 \(A_{i,j}=B_{j,i}\)

  1. 左旋 \(90^{\circ}\) 再竖直翻转一次再竖直翻转一次
\(B\) \(D\)
\(A\) \(C\)

对应布尔判断式 \(A_{i,j}=B_{n-j+1,i}\)

  1. 左旋 \(90^{\circ}\) 再竖直翻转一次再水平翻转一次
\(C\) \(A\)
\(D\) \(B\)

对应布尔判断式 \(A_{i,j}=B_{j,n-i+1}\)

  1. 左旋 \(90^{\circ}\) 再竖直翻转一次再水平翻转一次再竖直翻转一次
\(D\) \(B\)
\(C\) \(A\)

对应布尔判断式 \(A_{i,j}=B_{n-j+1,n-i+1}\)

经证明,其他所有翻转旋转情况都是这 \(8\) 种情况的任意一种。

AC Code

#include<iostream>
#include<cstdio>
#define N 12
using namespace std;
int n,flag;
char A[N][N],B[N][N];
signed main()
{cin>>n;for(int i=1;i<=n;i++)cin>>(A[i]+1);for(int i=1;i<=n;i++)cin>>(B[i]+1);flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[i][j])//枚举每一种 flag=0;if(flag)puts("Yes"),exit(0);//某种情况符合直接输出 Yes,然后结束程序 flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[n-i+1][j])flag=0;if(flag)puts("Yes"),exit(0);flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[i][n-j+1])flag=0;if(flag)puts("Yes"),exit(0);flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[n-i+1][n-j+1])flag=0;if(flag)puts("Yes"),exit(0);flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[j][i])flag=0;if(flag)puts("Yes"),exit(0);flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[n-j+1][i])flag=0;if(flag)puts("Yes"),exit(0);flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[j][n-i+1])flag=0;if(flag)puts("Yes"),exit(0);flag=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(A[i][j]!=B[n-j+1][n-i+1])flag=0;if(flag)puts("Yes"),exit(0);puts("No");//都不符合,输出 No  return 0;
}

屎山代码有点难看,不过还是通俗易懂的吧。

http://www.jsqmd.com/news/88372/

相关文章:

  • PS 例程大全
  • wangEditor导入excel数据到html富文本编辑
  • 如何利用JSP实现信创环境的大文件上传?
  • 实习面试题-Kotlin 面试题
  • CF1619G Unusual Minesweeper 解题报告
  • 毕设 stm32 RFID员工打卡门禁系统(源码+硬件+论文)
  • 基于vue的个人博客论坛交流网站_sdj10346_springboot php python nodejs
  • 光伏电池simulink仿真模型 光伏电池建模仿真 包括改变温度 改变辐照度的特性分析 模型可...
  • JSP中如何利用分块技术实现百万文件上传优化?
  • 多交换机VLAN的划分,配置trunk中继链路,链路聚合配置, 利用路由器连接网络,配置静态路由
  • JSP中如何集成SM4加密实现大文件上传存储安全?
  • 如何使用yolov11训练使用—番茄炭疽病与品质检测数据集 炭疽病症状识别、病害区域检测、成熟果实与腐烂果实区分 目标检测 4类 可直接用于模型训练 YOLO适用的txt格式
  • 四旋翼无人机PID控制仿真模型探索
  • wangEditor粘贴ppt母版样式自动适配网页
  • Vim 分屏操作详解
  • 63、技术综合指南:系统配置、数据库管理与网络应用
  • JAVA中如何利用JSP实现视频文件的分片上传?
  • MATLAB/Simulink仿真下的蓄电池储能及双向斩波充放电控制策略
  • 列出自己网站音频书籍资源方法附php代码
  • 48、PHP与C/C++编程实用指南
  • 隐式转换,强制转换,字符串,字符的加操作
  • .NET进阶——深入理解Lambda表达式(2)手搓LINQ语句
  • Android中Compose系列之按钮Button
  • SPSS——判别分析——“一般判别分析”
  • 49、Ubuntu 编程工具与 Mono 开发全解析
  • wangEditor支持pdf书签目录结构导入功能
  • Agent 结构(LLM + Tool + Executor)
  • 50、Mono应用开发与Linux机器安全防护
  • 嗨! Coze 的 AI 漫游:解锁智能体与工作流,轻松拿捏智能应用(1) - 实践
  • 红米10x将一键清理和锁屏加到桌面步骤