hiho一下 第163周:希尔伯特曲线


这道题乍一看,特别没有头绪,心想这扭来扭去的咋算啊,后来通过讨论区get了思路,我们只需要把整个图不断分割就可以了,从Hn到Hn-1状态。不过左下和右下都有翻转,废了点功夫。还有就是2的30次方很大,需要用long存储才能过所有题目。

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    int n;
    long x, y;
    while(cin >> n >> x >> y) {
        long nowa = pow(2, n) / 2;
        long result = 1;
        for(int i = 0; i < n; i++) {
            if(x > nowa && y > nowa) { //youshang
                x -= nowa;
                y -= nowa;
                result += 2 * nowa * nowa;
            } else if(y > nowa) { //zuoshang
                y -= nowa;
                result += nowa * nowa;
            } else if(x > nowa) { //youxia
                x = 2 * nowa - x + 1;
                y = nowa - y + 1;
                swap(x, y);
                result += 3 * nowa * nowa;
            } else { //zuoxia
                swap(x, y);
            }

            //cout <<x <<' '<< y<< ' '<< result << endl;
            nowa /= 2;
        }
        cout << result << endl;
    }
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,221评论 25 709
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 虽然现在的季节跟气温让大家比较难对史库水有感觉~不过待在家里看着计算机再裹上一层毛毯,其实暖呼呼的看相信也别有一番...
    二次元阅读 4,999评论 0 10
  • 山一程,水一程柳外楼高空断魂 马萧萧,车辚辚落花和泥碾作尘风轻轻,水盈盈人生聚散如浮萍梦难寻,梦难平但见长亭连短亭...
    一只修炼的跳蚤阅读 2,166评论 1 6