[hihocoder]hiho一下 第163周 希尔伯特曲线
来源:互联网 发布:云计算 视界云 知乎 编辑:程序博客网 时间:2024/05/22 02:06
题意:给出一个希尔伯特曲线(能够穿过一个边长为
解决思想:递归
每个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 longusing 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;}
阅读全文
0 0
- [hihocoder]hiho一下 第163周 希尔伯特曲线
- hiho一下 第163周 希尔伯特曲线
- hiho一下,第163周 题目1 : 希尔伯特曲线
- hihocoder第57周hiho一下#1196 : 高斯消元·二
- hiho一下 第133周 2-SAT·hihoCoder音乐节
- Hihocoder hiho一下 第140周 清理海报
- Hihocoder hiho一下 第141周 题目1 : 自行车架
- hihoCoder hiho一下 第148周--Font Size (模拟)
- hihocoder: hiho一下 第八十八周 88
- hihocoder hiho一下 第九十五周
- hihoCoder | hiho一下144周 机会渺茫
- hihoCoder | hiho一下145周 智力竞赛
- hiho一下 第143周 hiho密码
- hiho一下第一周 Hihocoder #1032 : 最长回文子串
- hiho一下 第四周 Hihocoder #1036 : Trie图
- hiho一下 第141周
- hiho一下 第139周
- hiho一下第143周
- 超级台阶
- caffe学习笔记-模型代码生成.prototxt文件
- 如何测试成像畸变?
- ios-RESful简单介绍
- javaweb项目发送邮件自定义发件人名称(javamail)
- [hihocoder]hiho一下 第163周 希尔伯特曲线
- 数据的排序及重排序问题(数据变化需要重排)
- 关于Android中HTTP请求中的EOFException解决办法
- Python面试题总结
- JQuery常用内容(更新中)
- DateUtil(java8)
- 【哈夫曼树】哈夫曼树的实现以及哈弗曼编码
- python语法、变量、内置类型、运算符
- oracle一些常见题目