• Acwing_98


    题目链接

    考察知识点: 坐标变换、递归、分治。


    核心问题:计算出点的坐标。

    策略是递归算出子图形中的坐标,再进行平移得到当前图形中的坐标。

    采用下图方式建立坐标系:原点在中心。

    在这里插入图片描述

    前置知识:

    ( x , y ) (x,y) (x,y) 逆时针旋转 θ \theta θ 角度,坐标为 ( x cos ⁡ θ − y sin ⁡ θ , x sin ⁡ θ − y cos ⁡ θ ) (x\cos\theta-y\sin\theta,x\sin\theta-y\cos\theta) (xcosθysinθ,xsinθycosθ)

    n n n 为等级, m m m 为在等级为 n n n 时的编号。

    单 位 长 度 = 2 n 单位长度=2^{n} =2n

    l e n = 单 位 长 度 2 = 2 n − 1 len = \frac{单位长度}{2} = 2^{n-1} len=2=2n1

    m = 4 n = 2 2 n m=4^{n}=2^{2n} m=4n=22n

    等级 2 2 2 0 0 0 号图形是由等级 1 1 1 的图形顺时针旋转 90 ° 90° 90° ,再进行 y y y 轴轴对称得到。

    假设在等级 1 1 1 中的坐标为 ( x , y ) (x,y) (x,y) ,旋转后为 ( y , − x ) (y,-x) (y,x) ,再进行关于 y y y 轴的轴对称得到 ( − y , − x ) (-y,-x) (y,x)

    同理可以得到如下表格:

    原始坐标图形0中坐标图形1中坐标图形2中坐标图形3中坐标
    ( x , y ) (x,y) (x,y) ( − y , − x ) (-y,-x) (y,x) ( x , y ) (x,y) (x,y) ( x , y ) (x,y) (x,y) ( y , x ) (y,x) (y,x)

    因为等级 1 1 1 的原点和等级 2 2 2 的原点不重合,所以需要将原点进行平移。

    原点平移后得到最终坐标如下:

    原始坐标图形0图形1图形2图形3
    $(x,y) $ ( − y − l e n , − x + l e n ) (-y-len,-x+len) (ylen,x+len) ( x + l e n , y + l e n ) (x+len,y+len) (x+len,y+len) ( x + l e n , y − l e n ) (x+len,y-len) (x+len,ylen) ( y − l e n , x − l e n ) (y-len,x-len) (ylen,xlen)

    我们的编号从 0 0 0 开始,计算坐标注意减一。

    时间复杂度: O ( n ) O(n) O(n)

    代码
    // #pragma GCC optimize(3)
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    // #include 
    // #include 
    #define endl '\n'
    #define x first
    #define y second
    #define fi first
    #define se second
    #define PI acos(-1)
    // #define PI 3.1415926
    #define LL long long
    #define INF 0x3f3f3f3f
    #define lowbit(x) (-x&x)
    #define ULL unsigned LL
    #define PLL pair<LL, LL>
    #define PIL pair<int, LL>
    #define PII pair<int, int>
    #define all(x) x.begin(), x.end()
    #define mem(a, b) memset(a, b, sizeof a)
    #define rev(x) reverse(x.begin(), x.end())
    #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
    
    using namespace std;
    
    LL n, a, b;
    
    PLL calc(LL n, LL m) {
    	if (n == 0) return {0, 0};
    	LL len = 1ll << (n - 1), cnt = 1ll << (2 * n - 2);
    	PLL pos = calc(n - 1, m % cnt);
    	LL x = pos.x, y = pos.y;
    	int z = m / cnt;
    	if (z == 0) {
    		return {-y - len, -x + len};
    	} else if (z == 1) {
    		return {x + len, y + len};
    	} else if (z == 2) {
    		return {x + len, y - len};
    	} 
    	return {y - len, x - len};
    }
    
    void solve() {
    	int tt;
        cin >> tt;
        while (tt -- ) {
        	cin >> n >> a >> b;
        	PLL ac = calc(n, a - 1), bc = calc(n, b - 1);
        	double dx = ac.x - bc.x, dy = ac.y - bc.y;    	
        	printf("%.0lf\n", sqrt(dx * dx + dy * dy) * 5);
        }
    }
    
    int main() {
    	IOS;
    	
    	solve();
    	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    初步认识 Web Components 并实现一个按钮
    基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2015/CEC2018/CEC2023(MATLAB代码)
    【秋招基础知识】【3】机器学习常见判别模型和生成模型
    代码随想录算法训练营第1天 | 704.二分查找、27.去除元素
    测试计划包括哪些主要步骤和信息?
    USART串口通讯
    beamManagement(一)idle初始接入过程
    C++ Reference: Standard C++ Library reference: C Library: cstring: strcpy
    Kubernetes 与 Calico 版本对比
    说一说ajax的请求过程?
  • 原文地址:https://blog.csdn.net/weixin_60484917/article/details/128199667