参考了https://blog.csdn.net/weizhuwyzc000/article/details/47038989

我一开始看了很久, 拿纸折了很久, 还是折不出题目那样。。一脸懵逼

后来发现不能按照平时那样折一下然后再旋转90度再折, 应该一直折……

后来观察到了规律, 发现其实一直在复制, 只是位置不太一样。但是不知道怎么实现这个过程

然后去看了上面的博客。

发现它把折纸这个过程规定了一种“标准”, 也就是方向, 上下左右。
这一步非常关键, 因为这使得折纸可以转化成了一堆步骤, 组合成了一条路径。
然后之前找出的规律也可以定量的表示出来。



  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define REP(i, a, b) for(int i = (a); i < (b); i++)
  5. using namespace std;
  6. const int MAXN = 5123;
  7. const char* word = "ludr";
  8. char s[MAXN][MAXN], buf[MAXN<<1];
  9. int max_y[MAXN];
  10. inline int id(char x) { return strchr(word, x) - word; }
  11. inline void up(int &a, int b) { a = max(a, b); }
  12. inline void down(int &a, int b) { a = min(a, b); }
  13. void update(char a, char b, int& x, int& y)
  14. {
  15. if(a == 'u') x--, y += (b == 'l' ? -1 : 1);
  16. if(a == 'd') y += (b == 'l' ? -1 : 1);
  17. if(a == 'l') y--, x += (b == 'd');
  18. if(a == 'r') y++, x += (b == 'd');
  19. }
  20. int main()
  21. {
  22. int n, len;
  23. while(~scanf("%d", &n) && n)
  24. {
  25. memset(s, 0, sizeof(s));
  26. memset(max_y, 0, sizeof(max_y));
  27. buf[0] = 'r'; buf[1] = 'u'; buf[2] = '\0';
  28. int cnt = 1;
  29. while(cnt < n)
  30. {
  31. len = strlen(buf);
  32. REP(i, 0, len)
  33. {
  34. if(i < (len >> 1)) buf[len+i] = word[3-id(buf[i])];
  35. else buf[len+i] = buf[i];
  36. }
  37. cnt++; buf[len<<1] = '\0';
  38. }
  39. int x = MAXN >> 1, y = MAXN >> 1;
  40. int max_x = x, min_x = x, min_y = y;
  41. len = strlen(buf); s[x][y] = '_';
  42. REP(i, 1, len)
  43. {
  44. update(buf[i-1], buf[i], x, y);
  45. s[x][y] = (buf[i-1] == 'u' || buf[i-1] == 'd') ? '_' : '|';
  46. up(max_x, x); up(max_y[x], y);
  47. down(min_x, x); down(min_y, y);
  48. }
  49. REP(i, min_x, max_x + 1)
  50. {
  51. REP(j, min_y, max_y[i] + 1)
  52. putchar(s[i][j] == 0 ? ' ' : s[i][j]);
  53. puts("");
  54. }
  55. puts("^");
  56. }
  57. return 0;
  58. }

紫书 习题8-5 UVa 177 (找规律)的更多相关文章

  1. 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)

    用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #includ ...

  2. 紫书 习题 11-8 UVa 1663 (最大流求二分图最大基数匹配)

    很奇怪, 看到网上用的都是匈牙利算法求最大基数匹配 紫书上压根没讲这个算法, 而是用最大流求的. 难道是因为第一个人用匈牙利算法然后其他所有的博客都是看这个博客的吗? 很有可能-- 回归正题. 题目中 ...

  3. 紫书 习题8-12 UVa 1153(贪心)

    本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是 固定的, 是在一个范围内"滑动的", 只要右端点不超过截止时间就ok. 然后我就先考虑有 ...

  4. 紫书 习题8-7 UVa 11925(构造法, 不需逆向)

    这道题的意思紫书上是错误的-- 难怪一开始我非常奇怪为什么第二个样例输出的是2, 按照紫书上的意思应该是22 然后就不管了,先写, 然后就WA了. 然后看了https://blog.csdn.net/ ...

  5. 紫书 习题 8-2 UVa 1610 (暴力出奇迹)

    这道题我真的想的非常的复杂, 拿草稿纸一直在找规律,推公式, 然后总有一些特殊的情况. 然后就WA了N次.无奈之下看了别人的博客, 然后就惊了.直接暴力枚举两个相邻字符串 里面的所有可能就可以了--真 ...

  6. 紫书 习题 10-11 UVa 1646(斐波那契+高精度)

    自己用手算一下可以发现是斐波那契数列,然后因为数字很大,用高精度 以后做题的时候记得算几个数据找规律 #include<cstdio> #include<cmath> #inc ...

  7. GCD XOR UVA 12716 找规律 给定一个n,找多少对(a,b)满足1<=b<=a<=n,gcd(a,b)=a^b;

    /** 题目:GCD XOR UVA 12716 链接:https://vjudge.net/problem/UVA-12716 题意:给定一个n,找多少对(a,b)满足1<=b<=a&l ...

  8. 紫书 习题 10-13 UVa 11526(打表找规律+分步枚举)

    首先看这道题目,我预感商数肯定是有规律的排列的,于是我打表找一下规律 100 / 1 = 100 100 / 2 = 50  100 / 3 = 33  100 / 4 = 25  100 / 5 = ...

  9. 紫书 习题 8-20 UVa 1620 (找规律+求逆序对)

    这道题看了半天没看出什么规律, 然后看到别人的博客, 结论是当n为奇数且逆序数为奇数的时候 无解, 否则有解.但是没有给出证明, 在网上也找到详细的证明--我也不知道是为什么-- 求逆序对有两种方法, ...

随机推荐

  1. 进程线程之pid,tid

    Linux中,每个进程有一个pid,类型pid_t,由getpid()取得.Linux下的POSIX线程也有一个id,类型pthread_t,由pthread_self()取得,该id由线程维护,其i ...

  2. jQuery优化性能的十种方法

    1,总是从ID选择器开始继承 例如: <div id="content"> <form method="post" action=" ...

  3. How Google Backs Up The Internet Along With Exabytes Of Other Data

    出处:http://highscalability.com/blog/2014/2/3/how-google-backs-up-the-internet-along-with-exabytes-of- ...

  4. JavaScript学习笔记(第二天)

    数组 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:Number/String.我们想存储班级中所有学生的姓名,此时该如何存储? 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按 ...

  5. 如何在React-Native上使用Typescript

    首先安装脚手架: $ yarn global add create-react-native-app 创建项目: create-react-native-app xxx 进入项目并启动: cd xxx ...

  6. RabbitMQ学习总结(4)——分发任务在多个工作者之间实例教程

    一.Work Queues(using the Java Client) 走起   在第上一个教程中我们写程序从一个命名队列发送和接收消息.在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工 ...

  7. spring boot学习(转)

    玩转Spring Boot 前言         首先在这里对Spring Boot做个简单的介绍,对Spring Boot也关注了挺久了,Spring Boot是由Pivotal团队提供的全新框架, ...

  8. maven 构建web项目

    Maven规定,必须创建以下几个Source Folder src/main/resources src/main/Java src/test/resources src/test/java 添加以上 ...

  9. linux svn命令具体解释

    检測是否安装svn:svnserve --version svn服务的关闭:killall svnserve 创建svn库:svnadmin create /opt/svn/repos 配置自己主动启 ...

  10. ubuntu16.04安装opencl

    参考链接:https://www.jianshu.com/p/ad808584ce26 安装OpenCL OpenCL是一系列库和头文件,需要根据硬件安装对应的SDK,也就是说,如果希望使用Intel ...