Fractal Streets 递归+坐标转换
- n阶分形图是由前面的(n-1)阶分形图所构成:
- 左上角是沿Y轴右旋转90度再沿X轴选择180度;
- 右上角不变;
- 左下角是沿Y轴左旋转90度再沿X轴选择180度;
- 右下角不变。
再找到对应的坐标变换:
左上角:(y,x)
右上角:(x,y+1<<(n-1))
左下角:(1<<n-y+1,1<<(n-1)-x+1)
右下角:(x+1<<(n-1),y+1<<(n-1))
import java.util.Scanner;public class MainG {static long x,y;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = sc.nextInt();while(t-- > 0) {int n = sc.nextInt();long a = sc.nextLong();long b = sc.nextLong();G ares = dfs(n,a);G bres = dfs(n,b);System.out.println(res(ares,bres));}}public static long res(G a,G b) {return (long)(Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))*10+0.5);}public static G dfs(int n,long id) {if(n==1) {if(id==1) {x = 1;y = 1;}else if(id==2) {x = 1;y = 2;}else if(id==3) {x = 2;y = 2;}else {x = 2;y = 1;}return new G(x,y);}else {G t;long tem = (long)1<<(n-1);long tid = tem*tem;if(id<=tid) { //左上角t = dfs(n-1,id);long temp = t.x;t.x = t.y;t.y = temp;return t;}else if(id<=2*tid) { //右上角t = dfs(n-1,id-tid);t.y += tem;return t;}else if(id<=3*tid) { //左下角t = dfs(n-1,id-2*tid);t.x += tem;t.y += tem;return t;}else { //右下角t = dfs(n-1,id-3*tid);long temp = t.x;long tx = (long)1<<n;t.x = tx-t.y+1;t.y = tem-temp+1;return t;}}}
}
class G{long x,y;public G(long x,long y) {this.x = x;this.y = y;}
}
Fractal Streets 递归+坐标转换相关推荐
- Fractal Streets(经典分形递归+坐标旋转)
原题链接:Fractal Streets 题面: 思路: 本题关键要解决:求编号为MMM的房屋在NNN级城市中的位置.把该问题记为 calc(N,M)calc(N, M)calc(N,M) ,本题就是 ...
- POJ 3889 Fractal Streets(逼近模拟)
$ POJ~3889~Fractal~Streets $(模拟) $ solution: $ 这是一道淳朴的模拟题,最近发现这种题目总是可以用逼近法,就再来练练手吧. 首先对于每个编号我们可以用逼近法 ...
- Fractal Streets (POJ3889)(分形图、递归)
题目传送门:http://poj.org/problem?id=3889 感谢大雪菜大神bilibili上的讲解和李煜东大神书本的引导. 题面大概意思是: 给你一个原始的分形图,t组数据,对于每组数据 ...
- Fractal Streets
FractalStreetsFractal StreetsFractal Streets 题目链接:POJ 3889 题目大意 给你一个原始的分形图,ttt组数据,对于每组数据,输入333个数nnn, ...
- 【POJ3889】Fractal Streets(分形图)
problem 给你一个原始的分形图 t组数据,对于每组数据,输入3个数n,h,o (n为在第n级,h,o为两个房子的编号) 求在第n级情况下,编号为h和o的两个点之间的距离*10为多少 其中,第n级 ...
- Fractal Streets||分形之城
这道题-蛮难的- 今天看到一句话,特别适合做这道题 文章目录 问题描述 思考 AC代码: 问题描述 城市的规划在城市建设中是个大问题. 不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大 ...
- [poj3889]Fractal Streets
转载请说明出处:http://blog.csdn.net/ben_xsy/article/details/79288058#%E4%BB%A3%E7%A0%81 目录 题目描述 解题思路 代码 题目描 ...
- POJ3889Fractal Streets 递归+ 坐标变换
参考:https://vjudge.net/solution/10966515 他这个地方是 1 4 2 3的标号 在递归的过程中要知道如何处理"轴对称","点对称&qu ...
- #分治#poj 3889 Fractal Streets
题目 问两个村庄之间的直线距离*10 分析 可以用分治的方法求出两个点的坐标,求出答案. 代码 #include <cstdio> #include <cmath> using ...
最新文章
- AI新基建如何构建?浪潮给出了一个答案
- 在 VS Code 里逛知乎、发文章?Zhihu on VSCode 来啦!重新定义内容创作!
- OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念...
- 5 控件固定大小_【聊技术】在Android中实现自适应文本大小显示
- 云炬WEB开发笔记 2-3git详细安装教程及下载太慢的解决办法
- jooq_jOOQ星期二:拉斐尔·温特豪德(Rafael Winterhalter)正在与字节好友合作字节码...
- 哲学家就餐(避免死锁)(多进程版)
- 链表的插入、删除、排序的程序
- iOS中的UIScrollView(滑动视图)
- python基础之函数介绍进阶操作、全局变量局部变量
- Java8 FlatMap的使用
- Linux笔记(df命令,du命令,磁盘分区)
- Easy RealMedia Producer使用向导
- js实现数组翻转(倒序输出)
- 3*4的方格,有多少个长方形?
- MySQL燕十八老师课程笔记:第十六课:MySQL各个函数
- 计算机发明者的电影,电脑发明的奠基人之一,你了解他的生平吗?这部电影带你走近天才...
- 滴答清单支持订阅哪些日历?
- 有机发光二极管显示技术
- Ubuntu 18.04安装远程桌面