• 【OpenJudge 8463】Stupid cat & Doge


    http://noi.openjudge.cn/ch0204/8463/
    挺恶心的一道简单分治。
    一开始准备非递归。
    大if判断,后来发现代码量过长,决定大打表判断后继情况,后来发现序号不对称。
    最后发现非递归分治非常不可做。
    采用递归和坐标变换,降低了编程复杂度和思维复杂度。
    坐标变换的思想十分的清晰啊!它是个好东西啊,以后要善用。

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll in() {
    	ll k = 0; char c = getchar();
    	for (; c < '0' || c > '9'; c = getchar());
    	for (; c >= '0' && c <= '9'; c = getchar())
    		k = k * 10 + c - 48;
    	return k;
    }
    
    void get(ll n, ll num, ll &x, ll &y) {
    	if (n == 1) {
    		if (num == 1)
    			x = 1, y = 1;
    		else if (num == 2)
    			x = 1, y = 2;
    		else if (num == 3)
    			x = 2, y = 2;
    		else
    			x = 2, y = 1;
    		return;
    	}
    	ll midb, mida, mid, right = 1LL << (n * 2), xx, yy;
    	mid = right >> 1;
    	midb = mid >> 1;
    	mida = mid + midb;
    	if (num <= midb) {
    		get(n - 1, num, xx, yy);
    		x = yy; y = xx;
    	} else if (num <= mid) {
    		get(n - 1, num - midb, xx, yy);
    		x = xx; y = yy + (1LL << (n - 1));
    	} else if (num <= mida) {
    		get(n - 1, num - mid, xx, yy);
    		x = xx + (1LL << (n - 1)); y = yy + (1LL << (n - 1));
    	} else {
    		get(n - 1, num - mida, xx, yy);
    		x = (1LL << n) + 1 - yy; y = (1LL << (n - 1)) + 1 - xx;
    	}
    }
    
    double sqr(double x) {return x * x;}
    
    ll T, n, S, D, Sx, Sy, Dx, Dy;
    
    int main() {
    	T = in();
    	while (T--) {
    		n = in(); S = in(); D = in();
    		get(n, S, Sx, Sy);// printf("%I64d %I64d ", Sx, Sy);
    		get(n, D, Dx, Dy);// printf("%I64d %I64d
    ", Dx, Dy);
    		printf("%.0lf
    ", sqrt(sqr(10.0 * (Sx - Dx)) + sqr(10.0 * (Sy - Dy))));
    	}
    	return 0;
    }
    
  • 相关阅读:
    kettle的使用(ETL,数据仓库技术)
    最近工作用到压缩,写一个zip压缩工具类
    JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
    JAVA反射机制
    guava的使用
    web项目中无法开启或404
    关于request.getServletContext()方法报错的问题
    使用U盘给笔记本重做系统
    sed速查手册
    awk速查手册
  • 原文地址:https://www.cnblogs.com/abclzr/p/5978905.html
Copyright © 2020-2023  润新知