首页 > 其他分享 >AcWing 98. 分形之城 题解

AcWing 98. 分形之城 题解

时间:2025-01-16 16:42:56浏览次数:1  
标签:平移 return int 题解 距离 98 len 90 AcWing

题面

link

【题目描述】
城市的规划在城市建设中是个大问题。

不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现。

而这座名为 Fractal 的城市设想了这样的一个规划方案,如下图所示:

image

当城区规模扩大之后,Fractal 的解决方案是把和原来城区结构一样的区域按照图中的方式建设在城市周围,提升城市的等级。

对于任意等级的城市,我们把正方形街区从左上角开始按照道路标号。

虽然这个方案很烂,Fractal 规划部门的人员还是想知道,如果城市发展到了等级 \(N\),编号为 \(A\) 和 \(B\) 的两个街区的直线距离是多少。

街区的距离指的是街区的中心点之间的距离,每个街区都是边长为 \(10\) 米的正方形。

【数据范围】
\(1\le N\le31,1\le A,B\le2^{2N},1\le n\le1000\)

思路

首先这道题一眼递归,通过 \(n-1\) 级的坐标信息就可以推出 \(n\) 级的坐标信息。

那我们不妨在图形中央建系。

image

那我们接下来考虑的就是坐标信息如何转移了。

1.坐标信息的转移

首先我们需要一些数学芝士铺垫一下:

  • 对于点 \((x, y)\),沿原点顺时针旋转 \(90°\),将变为 \((y, -x)\)。
  • 对于点 \((x, y)\),沿原点逆时针旋转 \(90°\),将变为 \((-y, x)\)。
  • 对于点 \((x, y)\),以 \(y\) 轴为对称轴翻转将变为 \((-x, y)\)。

我们直接探究等级 \(1\) 如何转等级 \(2\)

仔细观察左上角是由等级 \(1\) 顺时针旋转 \(90°\),再对 \(y\) 轴翻转而来(序号需要对应)。

image

右上角和右下角都是直接平移,不需要改变。

image

左下角是由等级 \(1\) 逆时针旋转 \(90°\),再对 \(y\) 轴翻转而来(序号需要对应)。

image

然后就根据象限平移就行了(具体细节见代码)。

2.计算距离

最后计算距离只需要 \(\times 5\) 而不是 \(\times 10\)。

因为原点是在图形中央的,而距离计算的是每个村庄中心点间的距离。

举个栗子:

image

若计算 \(1\) 和 \(4\) 的距离,如果 \(\times 10\),最后答案是 \(20\),而正确答案是 \(10\)。

最后 一定要开 \(long long\)!!!要写 \(1LL\) !!!

#include<bits/stdc++.h>
#define int long long
#define PII pair<int,int>
using namespace std;
int q,n,a,b;
PII solve(int n,int m)//细节m是从0开始的
{
	if(n==0) return {0,0};
	int len=1LL<<(n-1);//象限边长 2^{n-1} 不写1LL两行泪
	int cnt=1LL<<(2*n-2);//象限总数 4^{n-1}
	PII xx=solve(n-1,m%cnt);//上一等级的坐标信息
	int x=xx.first,y=xx.second;
	int z=m/cnt;//判断处于哪个象限
	/*
	象限分布为(由等级 1 定义而来)
	0|1
	———
	3|2
	0为第二象限,1为第一象限,2为第四象限,3为第三象限
	*/
	if(z==0)
	{
		//(x,y)顺转90->(y,-x)翻转y轴->(-y,-x)平移->(-y-len,-x+len)
		return {-y-len,-x+len};
	}
	else if(z==1)
	{
		//(x,y)平移->(x+len,y+len)
		return {x+len,y+len};
	}
	else if(z==2)
	{
		//(x,y)平移->(x+len,y-len)
		return {x+len,y-len}; 
	}
	else
	{
		//(x,y)逆转90->(-y,x)翻转y轴->(y,x)平移->(y-len,x-len)
		return {y-len,x-len};
	}
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>q;
	while(q--)
	{
		cin>>n>>a>>b;
		PII x=solve(n,a-1);//细节从0开始
		PII y=solve(n,b-1);
		double w=(double)x.first-y.first,v=(double)x.second-y.second;
		double ans=sqrt(w*w+v*v)*5;//距离公式 细节原点是在图形中央,所以距离只用乘5
		cout<<fixed<<setprecision(0)<<ans<<"\n";//四舍五入
	}
	return 0;
}

标签:平移,return,int,题解,距离,98,len,90,AcWing
From: https://www.cnblogs.com/yaaaaaan/p/18675265

相关文章

  • 信号与系统(郑君里)第一章-绪论 1-2 课后习题解答
    题目详情(1-2分别判断下列各函数式属于何种信号,即是连续时间信号还是离散时间信号,若是离散时间信号是否为数字信号?其中各式中n为正整数)答案解析:(1)连续信号模拟信号(2)离散信号抽样信号(3)离散信号数字信号 该函数只取±1,所以为数字信号(4)离散信号抽样信号 该函数随着n的......
  • 信号与系统(郑君里)第一章-绪论 1-3 课后习题解答
    题目详情(分别求下列各周期信号的周期T。)答案解析:tips:本道题考察的是信号的周期性第(1)小题注意连续的找周期找出最小公倍数就可以了,不一定是要整数;第(2)小题注意指数是带有“j”的,如果没有“j”那就不是周期信号了;第(3)小题遇到平方形式第一时间想到用二倍角公式,可以使得形式......
  • 解析function(_0x457ace, _0x349832) 即random出处
    function(_0x457ace,_0x349832){ _0x457ace=_0x457ace-0x18a; var_0x4c6e1a=_0x19971f[_0x457ace]; if(a0_0x457a['pIaRKj']===undefined){ var_0x2a073e=function(_0x3f86c9){ var_0x153ef8='abcdefghijklmnopqrstuvwxyzABCDEFGH......
  • 题解:AT_arc190_b [ARC190B] L Partition
    题目传送门很显然每次填完L之后所覆盖的图形为正方形,不然最最后无法填出正方形。现在假设我们已经确定了一个\(k\)阶的L,要求它的方案数。对于\([1,k-1]\)阶L的放法,每阶的\(4\)种方向都对应着一种方案,但\(1\)阶只有\(4\)种都是一样的,所以总方案数为\(4^{k-2}\)......
  • Codeforces 1536B Prinzessin der Verurteilung 题解 [ 紫 ] [ 后缀自动机 ] [ 动态规
    PrinzessinderVerurteilung:最短未出现字符串的板子。思路考虑在SAM上dp,定义\(dp_i\)表示从\(i\)节点走到NULL节点所花费的最少步数。显然我们建出反图,跑DAG上dp即可。转移如下:\[dp_i=1+\min_{j=1}^{|v_i|}dp_{v_{i,j}}\]输出方案的话记录下每个dp值的先驱,最......
  • [CF2057G] Secret Message 题解
    神秘题目。题目的条件十分神奇,\(|A|\le\frac{1}{5}(s+p)\),不知所云。一开始尝试用皮克定理转化,但是failed。阅读理解之后发现有一个(很典)的套路,就是构造出五组方案,使得\(\sum_{cyc}|A|=s+p\),这样就一定有一组方案,面积小于等于$\frac{1}{5}(s+p)$。如何构造?我们发现......
  • AcWing 274. 移动服务 题解
    Tag:线性dp题面link题目描述一个公司有三个移动服务员,最初分别在位置\(1,2,3\)处。如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去。某一时刻只有一个员工能移动,且不允许在同样的位置出现两个员工。从\(p\)到\(q\)移动一个员工,需要花费......
  • 第七届传智杯初赛第二场(abc三组)补题+题解python
    文章目录前言A计算商品打折结算金额(B组、C组)B茶杯和球(A组、C组)C游游的字母串(A组、B组、C组)D电梯(B组、C组)E小欧的排列计算(A组、B组、C组)F游游的字母子串(A组、B组、C组)G跳跳跳(A组、B组)H小红的战争棋盘(A组)前言在CSDN上并未找到第七届传智杯......
  • 信号与系统(郑君里)第一章-绪论 1-1 课后习题解答
    题目详情(1-1分别判断题图1-1所示各波形是连续时间信号还是离散时间信号,若是离散时间信号是否为数字信号?)答案解析:(a)连续信号模拟信号(b)连续信号量化信号(c)离散信号数字信号(d)离散信号抽样信号(非数字信号)(e)离散信号数字信号(f)离散信号数字信号tips:本道题目考察了连续/......
  • ABC 243题解
    ABC243A-C太水不写了。D题意:从完全二叉树上点\(X\)开始移动,每次移动至父节点、左子节点或右子节点。询问N次移动后所处节点,保证答案小于\(10^{18}\)。解法:忘了过程有可能超longlong浪费两分钟。总之就是每一个向父节点操作会消掉最近一个未消掉的向儿子移动操作,然后......