龙曲线
龙曲线是以简单的数学规则画出一种曲线,它具有以下形态。曲线从一个简单的线段起始,按照一定规则变换此线段完成整个曲线。每形成一次变换称为“完成了一次变换代”,而每完成一代,曲线会进化到更复杂的形式。像这种“放大其一小部分的形状时,表现出与整个形状极为相似构造的图形”,就是分形。
画出龙曲线的方法暂且就称为龙曲线字符串吧!龙曲线字符串由X、Y、F、+、-组成。
那么,要画出龙曲线就从一个点起始画出如下曲线即可。

F:向前方移动一格并画线。
+:向左旋转90度。
-:向右旋转90度。
X、Y:忽略。
画出第0代龙曲线的字符串是FX。从下一代开始,按照如下方式利用前一代字符串进行字符替换,从而获得当前一代的龙曲线字符串。
X-> X+YF
Y-> FX+Y

根据上面的替换式,就有如下的1、2代龙曲线字符串。
第一代:FX+YF
第二代:FX+YF+FX-YF
我们想要求出第n代龙曲线字符串。不过,考虑到答案有可能很长,所以只想计算出第p个字符起始长度为l个字符的字符串。请编写程序实现这种功能。

输入
第一行输入测试用例的个数C(C<=50)。各测试用例的第一行分别输入3个整数,即龙曲线的世代n(0<=n<=50)、p以及l(1<=p<=1 000 000 000、1<=l<=50)。第n代龙曲线字符串的长度可假设成总是大于等于p+l的数值。
输出
每个测试用例在1行内输出第n代龙曲线字符串的第p个字符开始,输出l个字符。

示例输入
4
0 1 2
1 1 5
2 6 5
42 764853475 30
示例输出
FX
FX+YF
+FX-Y
FX-YF-FX+YF+FX-YF-FX+YF-FX-YF-

首先是暴力 代码

#include<iostream>
using namespace std;void dfs(string str, int N) {if(N == 0) {cout << str;return;}for(int i = 0; i < str.size(); ++i) {if(str[i] == 'X')dfs("X+YF", N - 1);else if(str[i] == 'Y')dfs("FX-Y", N - 1);elsecout << str[i];}
}int main() {int n;cin >> n;dfs("FX", n);
}

这里我们爆出 1 到 5 的数据表

第一代:FX+YF // 5
第二代:FX+YF+FX-YF // 11
第三代:FX+YF+FX-YF+FX+YF-FX-YF // 23
第四代:FX+YF+FX-YF+FX+YF-FX-YF+FX+YF+FX-YF-FX+YF-FX-YF // 47
五:      FX+YF+FX-YF+FX+YF-FX-YF+FX+YF+FX-YF-FX+YF-FX-YF  \+FX+YF+FX-YF+FX+YF-FX-YF-FX+YF+FX-YF-FX+YF-FX-YF

字符数:sum[i] = (sum[i-1] << 1) + 1;

字母规律:循环节 FXYFFXYF
符号规律:

1.    +
2.    + + -
3.    + + - + + - -
4.    + + - + + - - + + + - + + - -
5.    + + - + + - - + + + - + + - - + + + - + + - - + + + - + + - -

发现 每个字符 前后的空隙 轮着插 + -;
所以 再倍增上一个的同时 把 + - 依次插入
这也是为什么 字符数:sum[i] = (sum[i-1] << 1) + 1; 是这样规律

那么 我们选择 每次将 非 0, 2, 4 位置的F X Y以外 的下表 首先 / 3
然后不断 / 2 只到达到奇数位
例如 第 3 代

  1 2 3 4 5 6 7+ + - + + - - 第一位 + 1 mod 4  = 2 :+第二位 / 2 之后 + 1 mod 4 = 2:+第三位 +1 mod 4 = 0 :-第四位 / 2 / 2 + 1 mod 4 = 2 :+第五位 + 1 mod 4 = 2 : +第六位 / 2 + 1 mod 4 =  0 : -第七位 + 1 mod 4 = 0 : -大体上是这样的一般规律 其实mod 2在搞规律也行 我找的时候当4的循环节了 同时mod 4也是因为我前面没有处理好
#include<bits/stdc++.h>
using namespace std;void get_c(int &x) {while(x % 2 == 0) {x /= 2;}
} // 确定第 x 位 属于O, E层次void output(int x) {if(x % 6 == 2) // 循环节 2pcout << "X";else if(x % 6 == 4) // 循环节 3pcout << "Y";else if(x % 3 == 0) {x = x / 3;get_c(x); // 降 kif((x + 1) % 4 == 2) {cout << "+";} elsecout << "-";} elsecout << "F"; // 循环节 1p
}void sol(int p, int l) {for(int i = 0; i < l; i++) {int k = p + i;output(k);}cout << endl;
}int main() {int cas;for(cin >> cas; cas--;) {int n, p, l;cin >> n >> p >> l;sol(p, l);}return 0;
}

龙曲线 [分形] 从 DFS暴力 到 规律 实现相关推荐

  1. 分形 —— 龙曲线的构造

    龙曲线的构造如果仅仅通过文字描述的话,可能会略显抽象,这里有一个可视化的视频,讲述整个龙曲线的从无到有,从简单到复杂的构造过程,[分形几何]<侏罗纪公园>原著里神奇的"龙曲线&q ...

  2. ZOJ 3300 Mahjong DFS暴力解决。。

    ZJU 3300: 题目描述 就看成1-9的数字,DFS暴力搜索下就过了..... 要求输入13 个数字,声明个数组记录数字的个数,DFS 里各种回溯: #include<stdio.h> ...

  3. Codeforces9C dfs暴力

    一道水题,dfs暴力就行. #include <stdio.h>int ans = 0, num; void dfs(int n) {if(n > num)return;dfs(n ...

  4. C-木棍游戏 DFS暴力

    题目链接:C-木棍游戏_牛客小白月赛43 (nowcoder.com) #include<algorithm> #include<cstdio> #include<cst ...

  5. [CF750D] New Year and Fireworks(暴力,规律,dfs)

    题目链接:http://codeforces.com/contest/750/problem/D 题意:烟花看做n层,第i层的格子可以朝45°方向的格子扩展ti次,问有多少格子可以被经过. vis(x ...

  6. nssl1321,jzoj(初中)2106-买门票【dfs,暴力,字符串】

    正题 题目大意 给定一些字母,用字母组成一个单词要求满足 从小到大 有1个元音字母 有2个辅音字母 长度为LLL 输出字典序最小的250002500025000个. 解题思路 暴力搜索时间复杂度 O( ...

  7. WUST 2090 HLD与停车场(bfs||dfs||暴力模拟||巧妙思维)

    2090: HLD与停车场 Time Limit: 1 Sec   Memory Limit: 128 MB   64bit IO Format: %lld Submitted: 21   Accep ...

  8. [HDU 1427]速度计算24点(DFS暴力搜索)

    主题连接:  http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表示当前已经算出的值是sum,括号里算 ...

  9. 添加中文数据出现问号_怪物猎人世界绚辉龙和冥赤龙的出现时间规律一览

    估计在七月上旬煌黑龙出现前,所有的活动任务都不会消失,唯一在变的元素就是绚辉龙和冥赤龙这两条特殊的古龙. 绚辉龙和冥赤龙目前看来是交替出现的,也就是说有绚辉龙的日子就不会有冥赤龙,每条龙分别驻场两周. ...

最新文章

  1. 【腾讯面试题】熊出没
  2. 美丽新世界:这七个原因将让未来更美好
  3. 有道精品课python-Python:7行代码爬取有道词典
  4. centos7.5 下LNMP搭建
  5. Android之圆角矩形
  6. 数字货币交易所数据安全随笔
  7. [技术分享]【DLI跨源】当DLI遇见MongoDB
  8. 【华为云分享】机器学习笔记(七) ---- 贝叶斯分类
  9. linux服务器数据备份到本地硬盘_等保数据备份和恢复关键点,这些你该知道!...
  10. 我学Flash/Flex(2):AS3读取XML文件内容
  11. 图片怎么去底色?怎么去图片背景为透明?
  12. 饥荒如何解锁机器人_饥荒人物怎么解锁
  13. 求一个数的最大真约数
  14. 【Segmentation】
  15. ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?
  16. (十五)使用任务通知实现命令行解释器
  17. sql server 经典练习题分享二
  18. 游戏阴阳师启动闪退问题解决
  19. Excel基础—Office2019安装
  20. numpy pandas matplotlib 学习笔记

热门文章

  1. xp系统启动qq就蓝屏怎么回事?
  2. python面试题整理
  3. macosx 快捷键 大全
  4. 在线markdown生成html,从markdown生成静态html页面的最简单的方法
  5. 防止多次点击产生多个提交
  6. word2vec训练维基中文语料
  7. Ubuntu 11.10 图形(图解)安装教程、基本设置、网络设置、软件源、硬件驱
  8. java里怎么判断时间重合_java 判断两个时间段是否重叠的案例
  9. Docker端口映射无法访问的问题排查
  10. python 多线程下载数据集