2019 牛客多校第十场 E Hilbert Sort (分形 | 平面坐标旋转)

算法竞赛进阶指南 差不多就是 分形之城

看作向量旋转 平移 细节还不算多

#include <bits/stdc++.h>
using namespace  std;
 
long long f(int n, int x, int y) {
    if (n == 0) return 1;
    int m = 1 << (n - 1);
    if (x <= m && y <= m) {
        return f(n - 1, y, x);
    }
    if (x <= m && y > m) {
        return 3LL * m * m + f(n - 1, m * 2 - y + 1 , m - x + 1);
    }
    if (x > m && y <= m) {
        return 1LL * m * m + f(n - 1, x - m, y);
    }
    if (x > m && y > m) {
        return 2LL * m * m + f(n - 1, x - m, y - m);
    }
}
 
struct node {
    int x, y;
    int id;
    bool operator < (const node &a) const {
        return id < a.id;
    }
} a[1000005];
 
int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    for(int i = 1; i <= n; i ++) {
        scanf("%d %d", &a[i].x , &a[i].y);
    }
    for(int i = 1; i <= n; i ++) {
        a[i].id = f(k, a[i].x, a[i].y);
    }
    sort(a + 1, a + 1 + n);
    for(int i = 1; i <= n; i ++) {
        printf("%d %d\n",a[i].x, a[i].y);
    }
    return 0;
}
全部评论

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
10-17 16:07
门头沟学院 Java
牛牛大你18号:在汇报,突然弹出来,,领导以为我在准备跳槽,刚从领导办公室谈心出来
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务