皮亚诺曲线距离

皮亚诺曲线距离皮亚诺曲线距离题目描述皮亚诺曲线是一条平面内的曲线 下图给出了皮亚诺曲线的 11 阶情形 它是从左下角出发 经过一个 3 3 的方格中的每一个格子 最终到达右上角的一条曲线 下图给出了皮亚诺曲线的 2 阶情形 它是经过一个 3 2 3 2 的方格中的每一个格子的一条曲线 它是将 1 阶曲线的每个方格由 1 阶曲线替换而成 下图给出了皮亚诺曲线的 3 阶情形 它是经过一个 3 3 3 3 的方格中的每一个格子的一条曲线 它是将 2 阶曲线的每个方格由 1 阶曲线替换而成 皮亚诺曲

皮亚诺曲线距离

下图给出了皮亚诺曲线的 3 阶情形,它是经过一个 3^3 × 3^3 的方格中的每一个格子的一条曲线。它是将 3 阶曲线的每个方格由 2 阶曲线替换而成。

在这里插入图片描述

给定 k 阶皮亚诺曲线上的两个点的坐标,请问这两个点之间,如果沿着皮亚诺曲线走,距离是多少?

第二行包含两个整数 x1,y1,表示第一个点的坐标。

第三行包含两个整数 x2,y2,表示第二个点的坐标。

其中有 ,0 ≤ k ≤ 100, 0 ≤ x1, y1, x2, y2 < 3^k, x1, y1, x2, y2 ≤ 10^18 。数据保证答案不超过 10^18。

输出

#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; n/=2; } return ans; } long long dfs(long long n,long long xx,long long yy) { 
    if(n==0)return 1; if(n>=40)n=39; long long k,x,y,a,b; k=cheng(3,n-1);//(n-1)阶时的边长,也就是n阶时,分成9个(n-1)阶时每一块的边长 x=xx%k;//判断该点在所在块内的横纵坐标 y=yy%k;//判断该点在所在块内的横纵坐标 a=xx/k;//判断所在块的横纵坐标 b=yy/k;//判断所在块的横纵坐标 if(a==0&&b==0) return 0*k*k+dfs(n-1,x,y); else if(a==0&&b==1)return 1*k*k+dfs(n-1,k-1-x,y); else if(a==0&&b==2)return 2*k*k+dfs(n-1,x,y); else if(a==1&&b==2)return 3*k*k+dfs(n-1,x,k-1-y); else if(a==1&&b==1)return 4*k*k+dfs(n-1,k-1-x,k-1-y); else if(a==1&&b==0)return 5*k*k+dfs(n-1,x,k-1-y); else if(a==2&&b==0)return 6*k*k+dfs(n-1,x,y); else if(a==2&&b==1)return 7*k*k+dfs(n-1,k-1-x,y); else if(a==2&&b==2)return 8*k*k+dfs(n-1,x,y); //根据二阶图,找出其中每一个一阶的与一阶图的横纵坐标关系,注意图形一样,开始点和结束点的位置也一样 } int main() { 
    long long x1,x2,y1,y2; cin>>n; cin>>x1>>y1; cin>>x2>>y2; long long ans=dfs(n,x1,y1)-dfs(n,x2,y2);//找出两点到(0,0)间的距离 if(ans<0)ans=-ans; cout<<ans<<endl; return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208573.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午11:16
下一篇 2026年3月19日 上午11:16


相关推荐

  • java中long转int的原理

    java中long转int的原理long 转为 int 需要强转都很熟悉 那么介绍一下强转的具体原理 首先在计算机中 计算加法减法是用补码计算的 正数的补码为其二进制表示 负数的补码为其模的二进制表示取反加一 加入为八位二进制加法 如 3 5 nbsp 3 的补码为 00000011 5 的模为 5 二进制表示为 00000101 取反为 加一后为 所以 5 的补码为加法计算公式为 两个数的补码相

    2026年3月18日
    2
  • linux升级gfortran,gfortran编译cp2k4.1

    linux升级gfortran,gfortran编译cp2k4.1大部分安装包可以在 https www cp2k org static downloads 找到 其它的可以去官网自行下载 https www cndba cn shuye100 article 1723 操作系统版本 RedHatEnterp 3 Maipo root cp2kLinux x86 64 gfortran gc

    2026年3月18日
    1
  • iocomp控件与iocomp控件使用教程[通俗易懂]

    iocomp控件与iocomp控件使用教程[通俗易懂]WelcometotheIocompPlotPackManual.Thismanual,inadditiontoourhelpfilesandexamplesourcecodeprojects,providesafullsuiteofdocumentationforunderstandinghowourPlotPackcomponentsareconstructed,operate,andareusedtoenhancethe

    2022年7月17日
    25
  • cheerio 中文文档

    cheerio 中文文档相似的语法 cheerio 实现了核心 jQuery 的子集 cheerio 会从 jQuery 库中删除所有 DOM 矛盾和浏览器的尴尬部分 展示她真正华丽的 API 非常快 cheerio 使用一个非常简单的 一致的 DOM 模型 作为一个结果分析 处理和呈现的工具非常有效 基础的端到端基准测试显示其速度是 JSDOM 的 8x 倍 非常的灵活 cheerio 基于 FB55 sforgivinght cheerio 可以解析几乎任何 HTML 或 XML 文档

    2026年3月19日
    2
  • ActiveMQ发布订阅模式

    ActiveMQ发布订阅模式Topic 主题发布和订阅消息前面讲的案例都是点对点的消息 即一个生产者发送的一条消息只能被一个消费者消费 然后就移除了 而 topic 模式一条消息可以被多个消费者订阅 关系如下 定义生产者 packagecom dpb topic importjavax jms Connection importjavax jms ConnectionFa importjavax

    2026年3月16日
    2
  • Claude Code 一些使用经验分享

    Claude Code 一些使用经验分享

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号