[hihocoder]hiho一下 第163周 希尔伯特曲线
2017-08-16 18:10
555 查看
题意:给出一个希尔伯特曲线(能够穿过一个边长为2n 的正方形中的每单一块),和一个坐标,求这个坐标的方格位于这条曲线上的第几块。
解决思想:递归
每个n阶的希尔伯特曲线是右四个的n-1阶的希尔伯特曲线构成的,分成四个部分。
1.左下角这一部分坐标可以通过对y=x对称得到下一个递归坐标;
2.左上角这一部分坐标可以直接通过对y坐标减去(1<<(n-1));
3.右上角这一部分坐标可以通过对x,y坐标分别减去(1<<(n-1));
4.右下角这一部分坐标可以先对x坐标减去(1<<(n-1))再关于y=-x+(1<<(n-1))对称得到下一个递归坐标;
每次操作完以后要记得要将res加上改坐标前面的部分的总数。
解决思想:递归
每个n阶的希尔伯特曲线是右四个的n-1阶的希尔伯特曲线构成的,分成四个部分。
1.左下角这一部分坐标可以通过对y=x对称得到下一个递归坐标;
2.左上角这一部分坐标可以直接通过对y坐标减去(1<<(n-1));
3.右上角这一部分坐标可以通过对x,y坐标分别减去(1<<(n-1));
4.右下角这一部分坐标可以先对x坐标减去(1<<(n-1))再关于y=-x+(1<<(n-1))对称得到下一个递归坐标;
每次操作完以后要记得要将res加上改坐标前面的部分的总数。
#include<bits/stdc++.h> #define ll long long using namespace std; ll res=0; int recursion(ll n,ll x,ll y) { if(n == 1) { if(x == 1 && y == 1) return 1; if(x == 1 && y == 2) return 2; if(x == 2 && y == 2) return 3; if(x == 2 && y == 1) return 4; } ll style; if(x>(1<<(n-1)) && y>(1<<(n-1))){ style = 2; y-=(1<<(n-1)); x-=(1<<(n-1)); } else if(x<=(1<<(n-1)) && y>(1<<(n-1))){ style = 1; y-=(1<<(n-1)); } else if(x<=(1<<(n-1)) && y<=(1<<(n-1))){ style = 0; swap(x,y); } else if(x>(1<<(n-1)) && y<=(1<<(n-1))){ style = 3; x-=(1<<(n-1)); x=((1<<(n-1))+1-x); y=((1<<(n-1))+1-y); swap(x,y); } res+=style*(1<<(n-1))*(1<<(n-1)); recursion(n-1,x,y); } int main() { ll n,x,y; cin>>n>>x>>y; printf("%lld\n",res+recursion(n,x,y)); return 0; }
相关文章推荐
- hihoCoder 骨牌覆盖问题·一 hiho一下 第四十一周
- Hihocoder hiho一下 第140周 清理海报
- 堆——hihoCoder "hiho一下 第二十八周"题目解析
- Hihocoder hiho一下 第141周 题目1 : 自行车架
- hihocoder第57周hiho一下#1196 : 高斯消元·二
- hihoCoder - hiho一下 第二十七周 - A - 最小生成树二·Kruscal算法
- hihocoder: hiho一下 第八十八周 88
- hihoCoder hiho一下 第一周 #1032 : 最长回文子串 (Manacher)
- hihocoder hiho一下 第九十五周
- 【hihoCoder】【1032】hiho一下第一周/A:最长回文子串
- hihoCoder hiho一下 第148周--Font Size (模拟)
- hihoCoder hiho一下 第二周 #1014 : Trie树(Trie树基本应用)
- hihoCoder hiho一下 第四十一周:骨牌覆盖问题
- hihocoder:hiho一下第二十八周之二叉堆
- hihoCoder hiho一下 第十二周 #1055 : 刷油漆 (树上DP)
- hihoCoder hiho一下 第四十六周 博弈游戏·Nim游戏·三( sg函数 )
- hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)
- hihoCoder - hiho一下 第二十六周 - A - 最小生成树一·Prim算法
- hiho一下 第一百三十四周 #1468 : 2-SAT·hihoCoder新春晚会 【2-SAT 之 枚举--搜索】
- hihoCoder hiho一下 第四十四周 博弈游戏·Nim游戏