poj3889 Fractal Streets 题解报告

题目传送门

【题目大意】

社区的设计有一种特殊的规律,从左上角起沿着道路给房子编号,求给定编号的两间房子的距离。

【思路分析】

分析可得社区的设计规律,编号为$n$,即有$4^n$个小格子,每$4^{n-1}$个小格子为一个大格子,即整个图分为四部分,其中右上和右下两部分与编号为$n-1$的相同,左上是顺时针旋转90度的结果,左下是逆时针旋转90度的结果。

代码实现的过程中注意一下这几种不同的情况,计算出坐标后直接求距离。

【代码实现】

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #define rg register
 5 #define go(i,a,b) for(rg int i=a;i<=b;i++)
 6 #define ll long long
 7 using namespace std;
 8 int T,n,h,o;
 9 ll ksm[25];
10 int dfs(int num,int id,int &x,int &y){
11     if(num==1)
12         switch(id){
13         case 1:{x=1,y=1;return 0;}
14         case 2:{x=1,y=2;return 0;}
15         case 3:{x=2,y=2;return 0;}
16         case 4:{x=2,y=1;return 0;}
17         }
18     int size=ksm[num-1]*ksm[num-1];
19     if(id<=size) return dfs(num-1,id,y,x),0;//左上
20     if(id<=size*2) return dfs(num-1,id-size,x,y),y+=ksm[num-1],0;//右上
21     if(id<=size*3) return dfs(num-1,id-size*2,x,y),x+=ksm[num-1],y+=ksm[num-1],0;//右下
22     return dfs(num-1,id-size*3,y,x),x=ksm[num]+1-x,y=ksm[num-1]+1-y,0;//左下
23 }
24 int main(){
25     scanf("%d",&T);
26     ksm[0]=1;go(i,1,20) ksm[i]=ksm[i-1]<<1;//预处理
27     while(T--){
28         scanf("%d%d%d",&n,&h,&o);
29         int x1,x2,y1,y2;
30         dfs(n,h,x1,y1);dfs(n,o,x2,y2);//找出给定的两间房子的坐标
31         double as=sqrt((double)(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))*10+0.5;
32         int ans=(int)as;
33         printf("%d\n",ans);
34     }
35     return 0;
36 }

代码戳这里

原文地址:https://www.cnblogs.com/THWZF/p/11245419.html

时间: 2024-10-01 06:30:51

poj3889 Fractal Streets 题解报告的相关文章

POJ3889 Fractal Streets

我对分治的理解:https://www.cnblogs.com/AKMer/p/9728574.html 题目传送门:http://poj.org/problem?id=3889 据说这种图叫分形图--一般找找规律就好了,像我这种菜鸡也只会做变化小一点的分形图了. 时间复杂度:\(O(能过)\) 空间复杂度:\(O(1)\) 代码如下: #include <cmath> #include <cstdio> using namespace std; int read() { int

cojs 强连通图计数1-2 题解报告

OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一改就可以了 首先我们考虑不合法的方案强连通分量缩点后一定是DAG 考虑子问题:DAG计数 做法可以参考<cojs DAG计数1-4 题解报告> 这里给出转移方程 f(n)=sigma((-1)^(k-1)*C(n,k)*2^(k*(n-k))*f(n-k)) 如果考虑上强连通分量缩点的情况呢? 我

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第

线段树&#183;题解报告

线段树·题解报告 参考资料 ·课件 线段树 --刘汝佳 统计的力量,线段树全接触 --张昆玮 ·Blog [完全版]线段树 从普通线段树到zkw线段树 [总结][数据结构]ZKW线段树详解 选题目录 · Hdu1166 敌兵布阵(单点更新,区间求和) · Hdu1754 I Hate It(单点更新,RMQ) · Hdu3308 LCIS(单点更新,区间并) · Poj3468 A Simple Problem with Integers(区间加减,区间求和) · Poj2777 Count C

题解报告:hdu 1162 Eddy&#39;s picture

Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to become a painter.Every day Eddy draws pictures in his small room, and he usually puts out his newest pictures to let his friends appreciate. but the result i

题解报告:poj 3320 Jessica&#39;s Reading Problem(尺取法)

Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is coming, yet she has spent little time on it. If she wants to pass it, she has to master all ideas included in a very thick text book. The au

题解报告:poj 2480 Longge&#39;s problem(欧拉函数)

Description Longge is good at mathematics and he likes to think about hard mathematical problems which will be solved by some graceful algorithms. Now a problem comes: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N. 

题解报告(CDUT暑期集训——第三场)

题解报告(CDUT暑期集训--第三场) A - Problem A. Ascending Rating HDU - 6319 思路:单调队列板子题?(但是弱的一批的我还是不会用(有空补上 用的滑动窗口算法 按着题解的从后往前做(ps:菜是原罪 AC代码 #include<stdio.h> #include<iostream> #include<math.h> #include<algorithm> #include<string.h> #incl

Fractal Streets

POJ 题意:随着越来越大的城市对现代化的不断增长的需求,人们需要新的街道设计.克里斯是负责这些设计的不幸城市规划者之一.每年的需求都在不断增加,今年他甚至被要求设计一个全新的城市.克里斯现在需要做更多的工作,因为像任何好官僚一样,他非常懒惰.鉴于这是他与大多数计算机科学家共同的性格特征,他的一个最亲密的朋友保罗实际上是计算机科学家也就不足为奇了.正是保罗提出了一个让克里斯成为同龄人英雄的好主意:分形街!通过使用希尔伯特曲线,他可以轻松填充任意大小的矩形图,只需很少的工作. 1阶的希尔伯特曲线由