美文网首页
hiho一下 第163周:希尔伯特曲线

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

作者: wshxj123 | 来源:发表于2017-08-17 15:38 被阅读28次

这道题乍一看,特别没有头绪,心想这扭来扭去的咋算啊,后来通过讨论区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;
}

相关文章

网友评论

      本文标题:hiho一下 第163周:希尔伯特曲线

      本文链接:https://www.haomeiwen.com/subject/lkqnrxtx.html