FractalStreetsFractal StreetsFractal Streets

题目链接:POJ 3889

题目大意

给你一个原始的分形图,ttt组数据,对于每组数据,输入333个数nnn,hhh,ooo 。
(nnn为在第nnn级,hhh,ooo为两个房子的编号)
我们要求求在第nnn级情况下,编号为hhh和ooo的两个点之间的距离为多少。
(输出的值要四舍五入到整数)
其中,第nnn级分形图形成规则如下:

  1. 在右下角和右上角复制一遍n−1n-1n−1情况下的分形图
  2. 将n−1n-1n−1情况下的分形图逆时针旋转909090度,放到左上角
  3. 将n−1n-1n−1情况下的分形图顺时针旋转909090度,放到左下角

编号是从左上角那个点开始计111,沿着道路计数。

(从左到右分别是一到三级的分形图,小正方形的边长为10,点在小正方形的正中央)

样例输入

3
1 1 2
2 16 1
3 4 33

样例输出

10
30
50

数据范围

n&lt;16n &lt; 16n<16
h,o&lt;231h,o &lt; 2^{31}h,o<231

思路

这道题要用递归(dfs)(dfs)(dfs)来做。
我们可以将第nnn级变成444个n−1n-1n−1级,然后判断我们要找的那个点在哪一个,然后一直递归下去,就可以找到编号点所对应的坐标了。
我们找到两个编号的坐标,就可以通过勾股定理求出距离了。

代码

#include<cstdio>
#include<cmath>
#define abs(x) (x)<0?0-(x):(x)
#define pow(x) (x)*(x)
#define ll long long
using namespace std;
int T,n;
ll h,o,xx,yy,xxx,yyy;
void place(int nn,ll num,ll &x,ll &y)
{if (nn==1)//已经递归到最后一级了{if (num==1)//在左上角{x=1;y=1;}else if (num==2)//右上角{x=1;y=2;}else if (num==3)//左下角{x=2;y=2;}else if (num==4)//右下角{x=2;y=1;}return ;}ll temp=(ll)1<<(2*nn-2);//计算出四个区的分界线if (num<=temp) place(nn-1,num,y,x);//左上角else if (num<=2*temp)//右上角{place(nn-1,num-temp,x,y);//递归y+=1<<(nn-1);//准确坐标}else if (num<=3*temp)//左下角{place(nn-1,num-2*temp,x,y);//递归x+=1<<(nn-1);//准确坐标y+=1<<(nn-1);}else if (num<=4*temp)//右下角{place(nn-1,num-3*temp,y,x);//递归x=(1<<nn)+1-x;//准确坐标y=(1<<nn-1)+1-y;}
}
int main()
{scanf("%d",&T);//读入for (int i=1;i<=T;i++){scanf("%d%lld%lld",&n,&h,&o);//读入place(n,h,xx,yy);//求出出发点坐标place(n,o,xxx,yyy);//求出终点坐标printf("%.0lf\n",sqrt((double)(pow(abs(xx-xxx))+pow(abs(yy-yyy))))*10);//勾股定理求出距离(记得乘10)}return 0;
}

Fractal Streets相关推荐

  1. POJ 3889 Fractal Streets(逼近模拟)

    $ POJ~3889~Fractal~Streets $(模拟) $ solution: $ 这是一道淳朴的模拟题,最近发现这种题目总是可以用逼近法,就再来练练手吧. 首先对于每个编号我们可以用逼近法 ...

  2. Fractal Streets(经典分形递归+坐标旋转)

    原题链接:Fractal Streets 题面: 思路: 本题关键要解决:求编号为MMM的房屋在NNN级城市中的位置.把该问题记为 calc(N,M)calc(N, M)calc(N,M) ,本题就是 ...

  3. Fractal Streets||分形之城

    这道题-蛮难的- 今天看到一句话,特别适合做这道题 文章目录 问题描述 思考 AC代码: 问题描述 城市的规划在城市建设中是个大问题. 不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大 ...

  4. 【POJ3889】Fractal Streets(分形图)

    problem 给你一个原始的分形图 t组数据,对于每组数据,输入3个数n,h,o (n为在第n级,h,o为两个房子的编号) 求在第n级情况下,编号为h和o的两个点之间的距离*10为多少 其中,第n级 ...

  5. [poj3889]Fractal Streets

    转载请说明出处:http://blog.csdn.net/ben_xsy/article/details/79288058#%E4%BB%A3%E7%A0%81 目录 题目描述 解题思路 代码 题目描 ...

  6. Fractal Streets 递归+坐标转换

    n阶分形图是由前面的(n-1)阶分形图所构成: 左上角是沿Y轴右旋转90度再沿X轴选择180度: 右上角不变: 左下角是沿Y轴左旋转90度再沿X轴选择180度: 右下角不变. 再找到对应的坐标变换: ...

  7. Fractal Streets (POJ3889)(分形图、递归)

    题目传送门:http://poj.org/problem?id=3889 感谢大雪菜大神bilibili上的讲解和李煜东大神书本的引导. 题面大概意思是: 给你一个原始的分形图,t组数据,对于每组数据 ...

  8. #分治#poj 3889 Fractal Streets

    题目 问两个村庄之间的直线距离*10 分析 可以用分治的方法求出两个点的坐标,求出答案. 代码 #include <cstdio> #include <cmath> using ...

  9. 0x02.基本算法 — 递推与递归

    目录 一.递推与递归 二.分治 三.模拟计算机实现递归 四.相应习题: 0.AcWing 92. 递归实现指数型枚举(递归/循环+位运算) 1.AcWing 93. 递归实现组合型枚举 2.AcWin ...

最新文章

  1. 数据科学中一些不常用但很有用的Python库
  2. Windows Service 2008 R2 远程桌面关闭,自动注销的解决方法
  3. 百度工程师深度好文, 横评3大企业级区块链技术平台
  4. 函数对象 java_函数对象
  5. kingshard--一个支持sharding的MySQL Proxy项目
  6. 【Python】你的表格太丑了!能美化下吗?
  7. 分布式架构中一致性解决方案——Zookeeper集群搭建
  8. 1 课外笔记之网页动画——jsp系列问题
  9. 简单人物画像_你真的理解用户画像吗?| 船说
  10. Java 中的并发工具类
  11. 凝思系统如何调节分辨率_如何消除步进电机的噪音和振动?
  12. String s String s=null和String s=a区别
  13. 美国西海岸php,美国西海岸大学top 14
  14. Kettle组件Spoon的使用
  15. android q beta3更新功能,Android Q Beta 3更新内容:拥抱5G和可折叠设备
  16. Intellij IDEA 创建Hadoop开发工程
  17. 如何一键生成gif动画?如何将录屏转成gif动画?推荐一款绿色开源小软件ScreenToGif
  18. Android 自定义视频录制终极解决方案(翻转问题)
  19. NYOJ-234-DP(吃土豆)
  20. 华为荣耀4A USB 灰色解决版本

热门文章

  1. Attention 机制是什么?
  2. Scrapy框架爬取昵图网图片
  3. 使用matlab和GMT联合绘制带有省界的中国地图
  4. vim 删除重复部分的行 vim 技巧
  5. 《Java 开发手册》重磅发布,向全球开发者致敬!
  6. 11月20日 如何在场景开启Debug,自定义AI任务,EQS,创建自己的环境任务,使用Pawn环境检测来检测周围的环境,让AI动作更顺滑(动画混合
  7. python金融分析-基于Python的金融分析与风险管理
  8. c语言中单词的作用与形式,C语言基础教程:单词的用法与规则
  9. 电脑打死都连不上手机热点问题
  10. 做一个简单计算器(两个数的加减乘除)扣扣116119409