Acwing-98-分形之城(递推,数学)
链接:
https://www.acwing.com/problem/content/description/100/
题意:
城市的规划在城市建设中是个大问题。
不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现。
而这座名为 Fractal 的城市设想了这样的一个规划方案,如下图所示:
city.png
当城区规模扩大之后,Fractal 的解决方案是把和原来城区结构一样的区域按照图中的方式建设在城市周围,提升城市的等级。
对于任意等级的城市,我们把正方形街区从左上角开始按照道路标号。
虽然这个方案很烂,Fractal 规划部门的人员还是想知道,如果城市发展到了等级 N,编号为 A 和 B 的两个街区的直线距离是多少。
街区的距离指的是街区的中心点之间的距离,每个街区都是边长为 10 米的正方形。
思路:
根据书上理解的思路,不断根据n-1级的坐标推出n级的坐标,具体推得方法看代码.
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef long long ll;
typedef pair<long long, long long> PairLL;
typedef pair<long long, long long> PLL;
PairLL Cal(LL n, LL pos)
{
if (n == 0)
return make_pair(0LL, 0LL);//当处在第0级的时候,只有一间房屋,返回0,0
LL len = 1LL<<(n-1);//n-1级图形的边长
LL cnt = 1LL<<(2*n-2);//n-1级图形的节点数
PairLL now = Cal(n-1, pos%cnt);//在下一级的地图中是第几个节点
LL x = now.first, y = now.second;
LL p = pos/cnt;
//从左往右为y轴正方向, 由上往下为x轴正方向,看书一直没发现,一直没搞懂
if (p == 0)
return make_pair(y, x);//由在当前坐标先顺时针旋转90度, 得到(y, len-1-x), 同时因为转到上方时顺序颠倒.
//y轴要对称调换,即变为(y, len-1-(len-1-x) 即(y, x)
if (p == 1)
return make_pair(x, y+len);//右上角即当前坐标向右平移.
if (p == 2)
return make_pair(x+len, y+len);//右下角即当前坐标向右下平移
return make_pair(len+len-1-y, len-1-x);//先逆时针旋转90度,得到(len-1-y, x)
//同时y轴的对调变为(len-1-y, len-1-x),在因为要向下平移x再加上len.
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
LL a, b, n;
scanf("%lld %lld %lld", &n, &a, &b);
PairLL aa = Cal(n, a-1);
PairLL bb = Cal(n, b-1);
LL lenx = aa.first-bb.first;
LL leny = aa.second-bb.second;
double res = (sqrt(double(lenx*lenx+leny*leny))*10);
printf("%.0lf\n", res);
}
return 0;
}
Acwing-98-分形之城(递推,数学)的更多相关文章
- Luogu P2327 [SCOI2005]扫雷【递推/数学】By cellur925
题目传送门 推了好久啊.看来以后要多玩扫雷了qwq. 其实本题只有三种答案:0.1.2. 对于所有第一列,只要第一个数和第二个数确定后,其实整个数列就确定了,我们可以通过这个递推式得出 sec[i-] ...
- POJ1850-Code 递推数学
题目链接:http://poj.org/problem?id=1850 题目大意: 按照字典序对升序排列组成的字母进行编号,给出一个长度不超过10的串,求出它的编号是多少?如果无法进行编号则输出0. ...
- Number Sequence POJ - 1019 递推 数学
题意 1 12 123 1234 12345 ....这样的序列 问第n位数字是几 是数字! 1-9! 思路:递推关系 主要是位数的计算 用a[i]=a[i-1]+(int)log10((do ...
- uva11401:Triangle Counting 递推 数学
uva11401:Triangle Counting 题目读不清楚的下场就是多做两个小时...从1-n中任选3个不重复数字(不重复啊!!坑爹啊!)问能组成三角形的有多少个, 显然1~n能组成的三角形集 ...
- Acwing 98-分形之城
98. 分形之城 城市的规划在城市建设中是个大问题. 不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现. 而这座名为 Fractal 的城市设想了这样 ...
- CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)
CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...
- 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】
Pokémon GO Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【NOIP模拟赛】【数学真奇妙】【递推】旅行者问题
旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...
- ZOJ3329(数学推导+期望递推)
要点: 1.期望的套路,要求n以上的期望,则设dp[i]为i分距离终点的期望步数,则终点dp值为0,答案是dp[0]. 2.此题主要在于数学推导,一方面是要写出dp[i] = 什么,虽然一大串但是思维 ...
随机推荐
- 【AMAD】beaker -- 用于session和缓存的WSGI中间件
简介 动机 作用 个人评分 简介 Beaker1是一个web session和通用缓存库,并且包含一个WSGI中间件可以用于你的web应用. 动机 Beaker是基于MyghtyUtils2(一个古老 ...
- 【Python开发】查看数据类型
import types aaa = 0 print type(aaa) if type(aaa) is types.IntType: print "the type of aaa is i ...
- eclipse 建立 web fragment project 工程
1.鼠标右键---------new ---------Other 2.选择WEB----web fragment project 3.输入工程名,点finish
- flask的方法视图
from flask import Flask,views,render_template,request app = Flask(__name__) app.debug = True class L ...
- 01:gitbook使用
1.1 gitbook介绍 1.gitbook说明 GitBook 使用的markdown语法 在此基础上做了一些 写作便利性的加强 Markdown 是一种轻量级的「标记语言」,优点在于 专注你的文 ...
- 从入门到自闭之Python高阶函数
高阶函数:内部帮忙做了一个for循环 filter:筛选过滤 语法: filter(function,iterable) function: 1.指定过滤规则(函数的内存地址) 2.用来筛选的函数,在 ...
- Django之自定义标签,过滤器,以及inclusion_tag
目录 Django之自定义标签,过滤器,以及inclusion_tag 自定义过滤器 自定义标签 inclusion_tag inclusion_tag() 项目实例: inclusion_tag() ...
- PB动态游标代码段
sql = "select p_partno from p_partno_rm group by p_partno order by p_partno"declare my3 d ...
- DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)
DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...
- nginx配置一般优化参数
#user nobody; worker_processes 2; # CPU亲和力,worker_processes最多开启8个,注意写法 worker_cpu_affinity 01 10; wo ...