AcWing 98. 分形之城 题解

news/2025/1/16 16:39:30/文章来源:https://www.cnblogs.com/yaaaaaan/p/18675265

题面

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|20为第二象限,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;//距离公式 细节原点是在图形中央,所以距离只用乘5cout<<fixed<<setprecision(0)<<ans<<"\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870186.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jarvisoj_fm

格式字符串漏洞的篡改内容看到x值为3,将x的值改为4就好首先传入x参数的地址,这个地址存放在栈上偏移为11的位置,利用%11$n,定位到了偏移为11的位置,往这个位置写入数据,写入的数据由%11$n前面的参数的长度决定,而我们的x参数的地址,正好是4位,不需要添a来补齐位数就可以…

rust学习十七.1、async和await

本文对应相关书籍17.1章节。 先言:async和多线程没有什么密切关系,当然也不是毫无关系! 一、async在rust到底是什么 async中文的意思是异步,在编程中指的是:执行一段代码,主线程可以在等待完成之前,先做其它事情。 如果有写过前端代码,就明白这个东西。例如经典的jquer…

介绍5种从resources获取inputStream的方法

@Component @Slf4j public class TestFileService {@Autowiredprivate ResourceLoader resourceLoader;@PostConstructpublic void testInputStream() throws IOException {// 5种从resources获取inputStream的方法// 在大多数情况下,推荐使用ResourceLoader或ClassPathResour…

开发一个篮球共享计分器小程序

篮球共享计分器,实现多人实时共享记录比赛,提供个人/团队数据和表现的统计数据,提供单机版/共享版/私密版三种模式记录比赛,提供精简/精准版模式选择,保存历史比赛数据,可用于文字直播。序言作为一名篮球爱好者的程序员,在使用目前市面篮球计分器时,总觉得用的不顺手,…

飞机电气系统技术分析:数字样机技术引领创新

现代飞机正向着更安全、环保和经济的方向发展,飞机系统的设计日益复杂,对各子系统的性能和可靠性也提出了更高要求。作为飞机的重要组成部分,电气系统(Electrical System,ES)不仅负责为各类机载设备提供稳定的电力支持,还在飞行控制、导航、通讯以及乘客舒适性等方面发挥…

Go操作MongoDB

NoSQL泛指非关系型数据库,如mongo,redis,HBase。 mongo使用高效的二进制数据存储,文件存储格式为 BSON ( 一种json的扩展,比json性能更好,功能更强大)。 MySQL中表的概念在mongo里叫集合(collection), MySQL中行的概念在mongo中叫文档(document),一个文档看上去像一个j…

2025年实战技巧!如何通过项目管理助力产品经理实现产品目标?

在当今竞争激烈的商业环境中,产品经理不仅要负责产品的整体规划和设计,还需要确保项目能够按时、按质、按预算完成。这就需要产品经理具备出色的项目管理能力。本文将深入探讨如何通过项目管理助力产品经理实现产品目标,并提供2025年的实战技巧。引言 随着市场的不断变化和技…

Polygon-funky

E. Polygon 给定一个数 n,生成一个 nn 的一个全为 0 的初始矩阵,矩阵上方和左方均有一排炮台,矩阵的下边和右边是边界 炮台可以发射子弹,子弹只能直线行走,且遇到边界后会停止,遇到一个停止的子弹也会停止,子弹停止后的坐标里面的值记为 1 在任何时候,都不会有超过一门…

2025四款简单好用的电脑便签提醒软件推荐

进入2025年,越来越多的打工人需要在电脑上使用一款桌面便签或日程提醒软件,随时记录和管理工作事项,能够帮助我们高效整理思绪,确保重要事务不被遗漏。 今天给大家介绍四款简单又好用的电脑便签或日程提醒软件,总有一款是适合你的! 一、Win系统便笺 Windows操作系统自带的…

本次小论文minor revision中的知识积累

可以发邮件向编辑申请延期返修截止日期 https://cn.service.elsevier.com/app/answers/detail/a_id/29653/c/10595/supporthub/publishing/role/作者/ https://zhuanlan.zhihu.com/p/577324425申请邮件模板:如何在Editorial Manager系统中提交修改稿?【爱思唯尔Editorial Man…

多通道传感器接入集中控制频率温度 传感器集线器带来更多方便

多通道传感器接入集中控制频率温度 传感器集线器带来更多方便现场传感器太多,编号容易混乱?传感器集线器可以将多路传感器轮流切换到单一接口,为现场提供更多方便。操作简便直观,使用一个百位拨动开关和两个旋转开关(十位和个位)自由切换到任意传感器。 传感器通道多,最…

实战指南:优化采购流程,实现高效采购管理

优化采购流程需要从多个方面入手,包括明确采购需求、加强供商管理、优化采购谈判与合同签订、加强采购执行与跟踪、提高质量控制与验收水平、进行成本分析与优化、加强人员培训与发展以及注重合规与风险管理。通过这些措施的实施,可以显著提高采购效率和质量,降低采购成本,…