Hihocoder 1632 : Secret Poems 思维|技巧

题意

定义一个矩阵 他有n*n大小 然后给出他的真实信息的走法 让我们变换走法 再次把真实信息填入矩阵中
n<=100

分析

可以发现原文的读取方式无非就是如此
(0,1)向左
(1,-1)左下
(1,0)向下
(-1,1)右上
1边界检查
(1,0)向下
(1,-1)左下
(0,1)向左
(-1,1)右上
2退出检查
观察发现其中下和左移动都是1步 走斜线都是走到头
所以可以用边界检查控制移动方向从而按照对应的移动方式还原真实信息
当经过1后 发现剩下的方向就是1处之前的顺序 倒着来
那么我们就可以用一个方向向量表示方向
然后到1处就 逆序遍历方向向量
注意n的奇偶情况下 路径不同 但都是在右上或左下 走逆序方向
发现n为奇数时 在右上逆向 n为偶数在左下逆向 然而分别都是走斜边到的这一点
那么我们就可以在走斜边的时候判断如果到了这两点 就把他们方向逆序化0
得到了密文信息 螺旋矩阵输入就可以了
就是边界检查什么的 还有控制移动的时候不好写 还原信息的过程易出错

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
char a[105][105],ans[105][105];
int dir[][2] = {{0,1},{1,-1},{1,0},{-1,1}},dir2[][2] = {{0,1},{1,0},{0,-1},{-1,0}};
int main()
{int n;while(~scanf("%d",&n)){for(int i=1;i<=n;i++)scanf("%s",a[i]+1);string l;int x=1,y=1,tmp=1;l = a[x][y];//第一个字符要先加进去for(int i=0;;i=(i+tmp+4)%4){//方向变化 为了防止倒方向出现问题 还是再+4if(x==n&&y==n)break; //这句话比较奇怪 加在这里AC 下面的if-else 后面就RE 哪位细心地网友看出来为何了 可以留言一下if(i%2==0){x+=dir[i][0];y+=dir[i][1];l.append(1,a[x][y]);}else{while(x+dir[i][0]!=0&&x+dir[i][0]<=n&&y+dir[i][1]!=0&&y+dir[i][1]<=n){//边界判断用试加法 如果可行再加 因为一旦越界没有回来的向量x+=dir[i][0];y+=dir[i][1];               l.append(1,a[x][y]);}if((x==1&&y==n)||(x==n&&y==1))tmp=-tmp;//当到左上或右下转换方向}}int t=0;x=1,y=1;ans[x][y]=l[t++];for(int i=0;t<=n*n-1;i=(i+1)%4){while(t<n*n&&x+dir2[i][0]>0&&y+dir2[i][1]>0&&x+dir2[i][0]<=n&&y+dir2[i][1]<=n&&ans[x+dir2[i][0]][y+dir2[i][1]]==0)ans[x+=dir2[i][0]][y+=dir2[i][1]]=l[t++];} for(int i=1;i<=n;i++)printf("%s\n",ans[i]+1);memset(ans,0,sizeof(ans));memset(a,0,sizeof(a));}return 0;
} 

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

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

相关文章

[Leetcode][第108题][JAVA][将有序数组转换为二叉搜索树][二分法][递归]

【问题描述】[简单] 将一个按照升序排列的有序数组&#xff0c;转换为一棵高度平衡二叉搜索树。本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是&#xff1a;[0,-3…

CF Vicious Keyboard 构造水题

题目说 在给定字符串中 只能改变一个字符的情况下 求最大的VK字符的数量 分析 为了防止出错 这里要注意 为了防止VK判断的时候 不影响其他的判断 对于一个VK 我们最好不要把他删掉删掉后有可能会增加新的VK 就直接用特定值把原来的VK覆盖掉 然后对于剩下的可能 最多只能增…

数据结构:(1)课程总览

“数据结构”课程的内容 “数据结构”在计算机课程体系&#xff08;偏软&#xff09;中的地位 “数据结构”与程序设计类课程的关系 “数据结构”的学习目标 “数据结构”的学习方法

[剑指offer]面试题第[55-1]题[JAVA][二叉树的深度][BFS][DFS]

【问题描述】[简单] 输入一棵二叉树的根节点&#xff0c;求该树的深度。从根节点到叶节点依次经过的节点&#xff08;含根、叶节点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度。例如&#xff1a;给定二叉树 [3,9,20,null,null,15,7]&#xff0c;3/ \9 …

[剑指offer]面试题第[55-2]题[Leetcode][第110题][JAVA][平衡二叉树][DFS][剪枝]

【问题描述】[中等] 输入一棵二叉树的根节点&#xff0c;判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1&#xff0c;那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7 返回 true 。示例 2:给定二叉树…

[Leetcode][第32题][JAVA][最长有效括号][动态规划][栈][正向逆向结合]

【问题描述】[困难] 给定一个只包含 ( 和 ) 的字符串&#xff0c;找出最长的包含有效括号的子串的长度。示例 1:输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2:输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()"…

[剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]

【问题描述】[中等] 在一个数组 nums 中除一个数字只出现一次之外&#xff0c;其他数字都出现了三次。请找出那个只出现一次的数字。示例 1&#xff1a;输入&#xff1a;nums [3,4,3,3] 输出&#xff1a;4 示例 2&#xff1a;输入&#xff1a;nums [9,1,7,9,7,9,7] 输出&…

Nginx多进程高并发、低时延、高可靠机制在缓存(redis、memcache)twemproxy代理中的应用...

1. 开发背景 现有开源缓存代理中间件有twemproxy、codis等&#xff0c;其中twemproxy为单进程单线程模型&#xff0c;只支持memcache单机版和redis单机版&#xff0c;都不支持集群版功能。 由于twemproxy无法利用多核特性&#xff0c;因此性能低下&#xff0c;短连接QPS大约为3…

[Leetcode][第44题][JAVA][通配符匹配][贪心][动态规划]

【问题描述】[困难] 【解答思路】 1. 动态规划 第 1 步&#xff1a;设计状态 dp[i][j]dp[i][j] 表示字符串 ss 的前 ii 个字符和模式 pp 的前 jj 个字符是否能匹配 第 2 步&#xff1a;状态转移方程 第 3 步&#xff1a;考虑初始化 boolean[][] dp new boolean[m 1][n 1];…

annotation

Annotations提供一些本来不属于程序的数据。 注解(Annotation)相当于一种标记&#xff0c;在程序中加入注解就等于为程序打上某种标记&#xff0c;没有加&#xff0c;则等于没有任何标记&#xff0c;以后&#xff0c;javac编译器、开发工具和其他程序可以通过反射来了解你的类及…

43request对象 续

建立一个test.jsp <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"ISO-8859-1"> <title>Insert title here…

wannafly挑战赛4 C-割草机 思维

时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述 有一块n*m的地&#xff0c;每块地要么长满杂草(用’W’表示)&#xff0c;要么是空地(用’G’表示)&#xff0c;现在有一个…

[剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]

[剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 【问题描述】[简单] 输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数…

44response对象

<% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8" import"java.util.*,java.io.*"%> <%out.println("<h1>response内置对象</h1>");out.println("<hr>&qu…

POJ 1703 Find them, Catch them 种类并查集

题意 给出一堆点和关系 D为两点不同集合 A为查询两点是否不同集合 n<1e5 code #include<cstdio> #include<iostream> #include<algorithm>using namespace std; const int maxn 1e57; int f[maxn],rel[maxn];//rel为0表示与父节点不同类 1为同类 …

2018java最新面试题

java面试题连接地址 https://blog.csdn.net/qq_41701956/article/details/80250226 https://juejin.im/post/5aacad4551882555642bd1b0 https://juejin.im/post/5ab1a338518825558a067c1f https://juejin.im/entry/5c6aba00e51d45719047035e转载于:https://www.cnblogs.com/liu…

45请求转发和请求重定向区别

请求转发 定义一个response的jsp文件 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8" import"java.util.*,java.io.*"%> <%out.println("<h1>response内置对象</h1>&qu…