Fractal-Streets

2023-12-13 22:04
文章标签 fractal streets

本文主要是介绍Fractal-Streets,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


title: Fractal Streets
date: 2023-12-13 14:48:45
tags: 分形
categories: 算法进阶指南

题目大意

将原来的城市复制一遍放在原城市的上方,将原城市顺时针90°放在原城市的左上方,将逆时针90°后的城市放在原城市的左边,然后用道路将四部分链接起来,反复进行相同操作。
在这里插入图片描述

解题思路

这是著名的通过一定规律无限包含自身的“分形”图。为了方便计算,我们把标号从 0 0 0 开始
解题关键就是,求编号为 M M M 的房屋在 N N N 级城市的位置,把问题转化为 calc(N,M),因此改题目转化为求 c a l c ( N , A ) calc(N,A) calc(N,A) c a l c ( N , B ) calc(N,B) calc(N,B) 的距离。
在求解 c a l c ( N , M ) calc(N,M) calc(N,M) 时,因为 N − 1 N - 1 N1 级城市有 2 2 ∗ N − 2 2 ^ {2 * N - 2} 22N2 座房屋,所以我们先求解 c a l c ( N − 1 , M m o d 2 2 ∗ N − 2 ) calc(N - 1,M mod 2 ^ {2 * N - 2}) calc(N1,Mmod22N2),根据房屋编号 M 与 该级数的房屋总数确定编号上下左右位置。
在这里插入图片描述

代码实现

#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1314;const int MOD = 9901;typedef pair<LL,LL> PII;PII calc(LL n,LL m)
{if(n == 0) return make_pair(0,0);LL len = 1ll << (n - 1),cnt = 1ll << (2 * n - 2);//每一级的半长和多少个 1 级的 PII pos = calc(n - 1,m % cnt);LL x = pos.first, y = pos.second;LL z = m / cnt;if(z == 0) return make_pair(y,x);else if(z == 1) return make_pair(x,y + len);else if(z == 2) return make_pair(x + len,y + len);else  return make_pair(2 * len - y - 1,len - x - 1);
}
int main()
{int t; cin >> t;while(t --){LL N,A,B;cin >> N >> A >> B;PII a = calc(N,A - 1),b = calc(N,B - 1);LL x = a.first - b.first, y = a.second - b.second;cout << fixed << setprecision(0) << sqrt(x * x + y * y) * 10 << endl; } 
}

这篇关于Fractal-Streets的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/490129

相关文章

Atcoder [AGC003F] Fraction of Fractal

Description Snuke从他的母亲那里得到了生日礼物——一个网格。网格有H行W列。每个单元格都是黑色或白色。所有黑色单元格都是四联通的,也就是说,只做水平或垂直移动且只经过黑色单元格即可从任何黑色单元格移动到任何其他黑色单元格。 第i行第j列的单元格的颜色由字符si,j表示。如果si,j是 #,该单元格为黑色;如果si,j是 .,该单元格为白色。至少一个单元格是黑色的。 我们定义「

FerryMan Fractal渲染的第一张3DS图片

对于光线追踪场景中的任何物体,只要有了求交算法以及法线算法就可以渲染。 virtual int intersect( const Ray & ray, float & distance) = 0 ; virtual Vector3getNormal(Vector3 & pos) = 0 ; 为了适应三角形带的渲染,把三角形的数据结构定义为: Vector3 vertex[3

VC6工程转换到VC8,FerryMan Fractal遇到的麻烦

我终于决定将FMF转换到VC8环境下开发了,今天花了一下午的时间就做了这么件事情,哎!其中遇到了一些问题,列举如下: 1、缺少libc.lib解决这个问题的方法是去掉链接到libc.lib,具体地点:项目-〉属性-〉配置属性-〉链接器-〉忽略特定库。 2、unresolved external symbol __iob这个__iob找不到的问题费了我大部分的时间。跟踪到stdio.h文件,发现