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

hiho一下 第163周:希尔伯特曲线_第1张图片

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

#include 
#include 
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 <

你可能感兴趣的:(hiho一下 第163周:希尔伯特曲线)