皮亚诺曲线距离
题目描述
皮亚诺曲线是一条平面内的曲线。
下图给出了皮亚诺曲线的 1 阶情形,它是从左下角出发,经过一个 3 × 3 的方格中的每一个格子,最终到达右上角的一条曲线。
下图给出了皮亚诺曲线的 2 阶情形,它是经过一个 3^2 × 3^2 的方格中的每一个格子的一条曲线。它是将 2 阶曲线的每个方格由 1 阶曲线替换而成。
下图给出了皮亚诺曲线的 3 阶情形,它是经过一个 3^3 × 3^3 的方格中的每一个格子的一条曲线。它是将 3 阶曲线的每个方格由 2 阶曲线替换而成。
皮亚诺曲线总是从左下角开始出发,最终到达右上角。
我们将这些格子放到坐标系中,对于 k 阶皮亚诺曲线,左下角的坐标是(0, 0),右上角坐标是 (3^k − 1, 3^k − 1),右下角坐标是 (3^k − 1, 0),左上角坐标是(0, 3^k − 1)。
给定 k 阶皮亚诺曲线上的两个点的坐标,请问这两个点之间,如果沿着皮亚诺曲线走,距离是多少?
输入描述
输入的第一行包含一个正整数 k,皮亚诺曲线的阶数。
第二行包含两个整数 x1,y1,表示第一个点的坐标。
第三行包含两个整数 x2,y2,表示第二个点的坐标。
其中有 ,0 ≤ k ≤ 100, 0 ≤ x1, y1, x2, y2 < 3^k, x1, y1, x2, y2 ≤ 10^18 。数据保证答案不超过 10^18。
输出描述
输出一个整数,表示给定的两个点之间的距离。
输入输出样例
示例
输入
1
0 0
2 2
输出
8
运行限制
最大运行时间:1s
思路:将每一个n阶的图都看成一阶的,也就是说把每个n阶的图看成9个n-1阶的图,就转化成了一阶跟二阶的关系,根据二阶的和一阶的x,y之间的关系来逐层降阶
#include"iostream"
using namespace std;
long long n;
long long cheng(long long a,long long n)
{
long long ans=1;
while(n)
{
if(n%2==1){
ans*=a;
n--;
}
a*=a;