时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
【问题描述】
皮亚诺曲线是一条平面内的曲线。
下图给出了皮亚诺曲线的 1 阶情形,它是从左下角出发,经过一个 3×3 的方格中的每一个格子,最终到达右上角的一条曲线。

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

下图给出了皮亚诺曲线的 3 阶情形,它是经过一个 3 3 × 3 3 的方格中的每一个格子的一条曲线。它是将 2 阶曲线的每个方格由 1 阶曲线替换而成。( 最后一列倒数六和第七个点应该连着,图片有误)

皮亚诺曲线总是从左下角开始出发,最终到达右上角。我们将这些格子放到坐标系中,对于 k 阶皮亚诺曲线,左下角的坐标是(0,0),右上角坐标是 (3 k − 1,3 k − 1),右下角坐标是 (3 k − 1,0),左上角坐标是(0,3 k − 1)。给定 k 阶皮亚诺曲线上的两个点的坐标,请问这两个点之间,如果沿着皮亚诺曲线走,距离是到少?
【输入格式】
输入的第一行包含一个正整数 k,皮亚诺曲线的阶数。
第二行包含两个整数 x 1 , y 1 ,表示第一个点的坐标。
第三行包含两个整数 x 2 , y 2 ,表示第二个点的坐标。
【输出格式】
输出一个整数,表示给定的两个点之间的距离。
【样例输入】

1
0 0
2 2

【样例输出】

8

【样例输入】

2
0 2
0 3

【样例输出】

13

【评测用例规模与约定】
对于 30% 的评测用例,0 ≤ k ≤ 10。
对于 50% 的评测用例,0 ≤ k ≤ 20。
对于所有评测用例,0 ≤ k ≤ 100, 0 ≤ x 1 ,y 1 , x 2 ,y 2 < 3 k , x 1 ,y 1 , x 2 ,y 2 ≤ 10 18 。
数据保证答案不超过 10 18 。

思想:分治法,注意图形的转换

#include<iostream>
#include<utility>
#include<vector>
#include<cmath>using namespace std;typedef pair < int , int > location;
typedef long long ll;ll cacl(ll n,location loca){//n级皮亚诺,此时的坐标位置左下角为原点 ll pre_len=pow(3,n-1);ll total=0;location xy(loca.first/pre_len,loca.second/pre_len);ll x=loca.first,y=loca.second;ll num=0;if(xy.first==0){num=xy.second+1;}else if(xy.first==1){if(xy.second==2)num=4;else if(xy.second==1)num=5;else num=6;}else{num=7+xy.second;}total+=pre_len * pre_len * (num-1);if(n==1){return total;//结束标志 }location pre(loca);if(num==1);else if(num==2){pre=make_pair(-(x-pre_len+1),y-pre_len);}else if(num==3){pre=make_pair(x,y-2*pre_len);}else if(num==4){pre=make_pair(x-pre_len,-(y-3*pre_len+1));}else if(num==5){pre=make_pair(-(x-2*pre_len+1),-(y-2*pre_len+1));}else if(num==6){pre=make_pair(x-pre_len,-(y-pre_len+1));}else if(num==7){pre=make_pair(x-2*pre_len,y);}else if(num==8){pre=make_pair(-(x-3*pre_len+1),y-pre_len);}else{pre=make_pair(x-2*pre_len,y-2*pre_len);}return total+cacl(n-1,pre);
}int main(){ll n,x1,y1,x2,y2;cin>>n>>x1>>y1>>x2>>y2;location first(x1,y1),second(x2,y2);cout<<abs(cacl(n,first)-cacl(n,second));return 0;
}

第十一届蓝桥杯国赛 C++ B组 试题 F: 皮亚诺曲线距离 (C++代码)相关推荐

  1. 2020年第十一届蓝桥杯国赛—c++B组—试题F:皮亚诺曲线距离

    这道题我写了一个多小时,还是自己太菜了,两个样例都过了,三阶皮亚诺随便取了两个点,距离也是正确的,如果有大佬找到了我的问题,欢迎指正 以下是我的思路 思路 总体就是求出两个点到原点的距离,然后相减即可 ...

  2. 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑

    题目链接 Ideas 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑 Code Python if __name__ == '__main__':n = int(input( ...

  3. 2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数

    2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数 在线评测 Ideas 对于一个纯循环小数,假设循环节为l,则小数为0.llll-,转换为分数就是 l / (10 ** n ...

  4. 2020第十一届蓝桥杯国赛JAVA B组真题解析(带源码及解析)

    蓝桥杯历年真题及解析. 目录 蓝桥杯历年真题及解析. A: 美丽的 2 题目: 分析: AC代码: B: 扩散 题目: 分析: AC代码: C: 阶乘约数 题目: 分析: AC代码: D: 本质上升序 ...

  5. 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - G.重复字符串

    在线评测 Ideas 首先把字符串划分成 k 份,然后每份逐位对比,计算出现次数最多的字母,然后用 k 减去出现次数就是要修改的位置. Code Python from collections imp ...

  6. 第十一届蓝桥杯国赛题目

    以下是第十一届蓝桥杯国赛题目,供大家学习参考(提取码失效可以评论我) 百度云: 链接: https://pan.baidu.com/s/1g1o-px-RUVoXLLhRDS8cXQ 提取码: fgf ...

  7. 2020/第十一届蓝桥杯国赛/Java-A

    试题A:和数个数 boolean isPrime(int n) {for (int i = 2; i <= Math.sqrt(n); i++) {if (n % i == 0) {return ...

  8. 2020十一届蓝桥杯国赛二等奖Java B组

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 参考博客https://blo ...

  9. 第十一届蓝桥杯国赛H题答疑

    第十一届蓝桥杯国赛H题答疑 题目 [题目描述] [输入格式] [输出格式] [样例输入] [样例输出] [样例说明] [评测用例规模与约定] 分析(这篇水文的精髓) 代码 题目 万一图片加载不出来的话 ...

最新文章

  1. 自学成才翁_作为一名自学成才的开发者从“我的旅程”中吸取的教训
  2. 世界级安全技术专家力作——《Linux防火墙》
  3. 活动总结丨企业参访:特斯联科技集团有限公司
  4. python用os模块自动打开软件_Python实现自动打开电脑应用的示例代码
  5. 手动命令行编译APK
  6. Vue——vue-chartjs[Vue 对于 Chart.js 的封装]
  7. 【HibernateHibernate实体关系映射——双边的多对一、一对多关系
  8. 用python画一个人_用turtle画个单身狗送给自己~
  9. Python 深拷贝和浅拷贝的区别
  10. 测试需求分析和测试策略制定
  11. 理财产品利息一直降低是什么原因?
  12. java web分享ppt大纲 -- servlet包
  13. 持续技术开放 | SOFAStack 启用独立 Group
  14. Mac系统如何安装Eclipse并搭建Android开发环境
  15. html中两列合并,wps两列合并成一列(表格中怎么把两列内容合并)
  16. 银行电话精准营销的探索性分析并基于XGboost进行潜在客户预测建模
  17. 数据结构——学期总结
  18. java电子贺卡_用java写一个新春贺卡,可转exe的
  19. 魔众刮刮卡抽奖系统 v2.0.0 支付抽奖,更好用的刮刮卡系统
  20. DB2 with的定义与用法

热门文章

  1. 猫+交换机方案,家庭组网,装修的坑
  2. 从事了多年总承包现场管理,依然没有真正学会项目管理
  3. JavaScript --Node,js
  4. 神华15亿投薄膜太阳能:奇葩买卖or布局未来?
  5. Kali2021 忘记登录密码重置
  6. Painter X Artists(艺术家)画
  7. 北大软微计算机技术考研专业课,【2019年最新招生目录】北京大学软微学院软件工程考研专业课如何备考 参...
  8. SQL练习:创建四个数据表,录入学生信息,通过SQL语句查询学生成绩
  9. python+selenium实现的谷歌爬虫(超详细)
  10. java程序化交易软件_algo-trader