题意

定义一个矩阵 他有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;
} 

Hihocoder 1632 : Secret Poems 思维|技巧相关推荐

  1. 更快学习 JavaScript 的 6 个思维技巧

    2019独角兽企业重金招聘Python工程师标准>>> 我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前: 有些概念可能会造成混淆,尤其当你是 ...

  2. 更快学习 JavaScript的6个思维技巧

    我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前: 有些概念可能会造成混淆,尤其当你是从其他语言转过来的时候 找不到时间(有时是动力)学习. 很容易忘记已经理解 ...

  3. ACM 常用思维技巧

    下面是笔者做题中总结出来的思维技巧,一直持续更新 1:树状数组和线段树可以用来计数. 统计数组中某个数右边或右边比这个数小的数的个数 统计某个区间满足一定约束条件的个数 [HDU5775] Bubbl ...

  4. 总裁演说思维技巧:口才训练方法写日记法

    总裁演说思维技巧:口才训练方法写日记法 写日记法是口才训练的重要方法,坚持写日记可以有下面几个重要作用: 1.写日记需要将大脑中模糊的映像转化为清晰的语言文字表达出来,因此长期坚持写日记可以有效提高语 ...

  5. 数据分析学习笔记(二) 数据分析的思维技巧

    秦路<七周成为数据分析师>学习笔记,供自己学习查看使用,侵删. 目录 象限法 多维法 假设法 指数法 二八法 对比法 漏斗法 象限法 常见用途: 用户分群:用户价值与用户流失度两个维度进行 ...

  6. 总裁演说思维技巧:口才训练方法接话训练法

    总裁演说思维技巧:口才训练方法接话训练法 接话训练就是根据对方的最后一句或者一段话,结合前面的聊天内容,综合考虑当时的场景.双方的关系.身份等,充分发挥联想与想象,多用套路技巧,想出尽可能多的应对方式 ...

  7. 数据分析学习笔记(二)数据分析三思维七技巧

    数据分析学习笔记(二) What 三种核心思维 结构化 公式化 业务化 Why 数据分析的思维技巧 象限法 多维法 假设法 指数法 二八法 对比法 漏斗法 总结 How 如何在业余时间锻炼分析能力 好 ...

  8. javascript开发技巧训练_学好这些小技巧,帮你写出更好地JavaScript

    近几年来随着前端发展的日益成熟,JavaScript的日渐受到重视,以及Node.js方案变得越来越可行,我们对JavaScript程序员的需求也正在持续增长. 图片源自网络,仅做配文展示 从需求比例 ...

  9. 平面设计师如何训练自己创意思维

    有时我们看到一个平面作品,会有一种眼前一亮,印象深刻,甚至是心动的感觉,它的差异化让我们感觉到它的创意.这就是创意作品的魅力.平面设计师如何训练自己的创意思维能力,如何让自己的作品不会淹灭在众多作品中 ...

最新文章

  1. 提升用户体验的根本是内容
  2. 设置gbk_我的gVim设置
  3. 主数据管理(MDM)的七个最佳实践
  4. Vue项目报错记录解决Property or method “item“ is not defined on the instance
  5. 模拟实现单链表(三级)
  6. Aeroplane chess HDU - 4405(期望dp)
  7. lammps软件_Lammps模型构建的方法之一:组合模型构建
  8. dataGrid列比较多内容显示不全的扩展
  9. 通过SQL直接插入、修改ArcGIS SDE空间表中的数据
  10. 【多线程】LockSupport 使用 原理 源码 分析
  11. python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例
  12. 贺利坚老师汇编课程54笔记:PF奇偶标志PARITY FLAG
  13. 每天一个linux命令(60):scp命令
  14. Yii Framework2.0开发教程(7)账户注册开发
  15. Android腾讯微博开放平台入门(五)综合测试
  16. BZOJ4049 : [Cerc2014] Mountainous landscape
  17. 助力NBA复赛背后,NBA与可穿戴设备的纠葛缠斗
  18. 手机版云盘怎么打开连接服务器,手把手教你简易NAS构建,手机/平板/智能电视随意调取,家庭存储云共享,有了自己的网络云盘后再也不用担心容量不够了!...
  19. 什么是客户关系管理CRM?
  20. 大学计算机基础网络应用第二套,大学计算机基础)应用指导(第2版

热门文章

  1. 大二《数据结构》机考解题报告
  2. 银行系统日终结算要多久_美股顽强翻红!两连跌终结,联储降息预期已超九成!制造业疲软消费者信心坚挺,三大股指又假摔?...
  3. springboot webservice cxf 客户端调用
  4. MYSQL索引结构学习笔记
  5. Oracle - 新装数据库、新建用户注意事项
  6. spring mvc 入门DispatcherServlet转发
  7. 实验6 实践课程中的程序
  8. owncloud nginx php,nginx配置owncloud记录。
  9. android 歌曲剪辑 原理,在Android上,我该如何制作怪异的剪辑区域?
  10. 【C语言进阶深度学习记录】二十三 数组的本质分析