试题 历届真题 皮亚诺曲线距离【第十一届】【决赛】【C组】
试题 历届真题 皮亚诺曲线距离【第十一届】【决赛】【C组】
提交此题 评测记录
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
皮亚诺曲线距离
时间复杂度O(k)
思路:
对于k阶皮亚诺曲线点(0, 0)->(x, y)的距离表示为
pyn(k, x, y)
0 <= x, y <= 3^k-1
观察1阶皮亚诺曲线可得
pyn(1, x, y) = { {0, 1, 2},
{5, 4, 3},
{6, 7, 8}};
0 <= x, y <= 2
而对于k>1阶的皮亚诺曲线, 可以把k阶皮亚诺曲线的每个格子扩展为1阶皮亚诺曲线, 即可得到k+1阶皮亚诺曲线
这里可以将所求pyn(k, x, y)距离分为两段
pyn(k, x, y) =
pyn(1, x/p, y/p) (1阶皮亚诺曲线距离, p = 3^(k-1))
*
(3^p)^2 (将整个k阶皮亚诺曲线划分为1阶皮亚诺曲线, 1单元格内的总数(总距离))
+
pyn(k-1, x1, y1) (x1, y1为k阶x, y映射到k-1阶坐标, 整个含义为最后一个不完整单元格在k-1阶起点到(x1, y1)的距离)
映射规则:
if(x/p == 1) y = p - 1 - y; 既划分后1阶皮亚诺曲线, x坐标为1的翻转y
if(y/p == 1) x = p - 1 - x; y坐标为1的翻转x
举例:
样例2
2
0 2
0 3
将2阶皮亚诺曲线S划分为9个1阶皮亚诺曲线si, i=[0, 8], 观察可得
s1内的与s0连接的起点(2, 3)->x2(0, 3)的距离相当于截取点(0, 3)在s1内的坐标(x %= p, y %= p), 并翻转x坐标x0 = 3-1-0, y0 = 0(既把点(2, 3)当做1阶皮亚诺曲线的原点)
即可得到点x2(0, 3)的距离为
pyn(2, 0, 3) =
pyn(1, 0, 1) = 1
*
(3 ^ 1) ^ 2 = 9
+
pyn(1, 2, 0) = 6
= 1 * 9 + 6
= 15
同理可得
pyn(2, 0, 2) = 2
样例2结果为15 - 2 = 13
#include <iostream>using namespace std;typedef long long LL;//预存1阶皮亚诺曲线的距离矩阵
LL lengths[3][3] = {{0, 1, 2}, {5, 4, 3}, {6, 7, 8}};LL pw[200];//3的i次幂//初始化3的i次幂
void init()
{pw[0] = 1;for (int i = 1; i <= 39; i++) pw[i] = pw[i - 1] * 3;
}//计算距离并变换x, y
LL get_length(LL p, LL &x, LL &y)
{LL ix = x/p, iy = y/p;x %= p, y %= p;if(ix == 1) y = p - 1 - y;if(iy == 1) x = p - 1 - x;return lengths[ix][iy];
}//k阶皮亚诺曲线点(0, 0)到点(x, y)的距离
LL pyn(LL k, LL x, LL y)
{if(k == 1) return lengths[x][y];else return pw[k-1] * pw[k-1] * get_length(pw[k-1], x, y) + pyn(k-1, x, y);
}int main()
{LL k, sx, sy, ex, ey;cin >> k >> sx >> sy >> ex >> ey;if(k>=40)k=39;//k>40无效且爆long longinit();LL ans = pyn(k, sx, sy) - pyn(k, ex, ey);//可以使用llabs, 切忌使用abscout << (ans>0 ? ans : -ans) << endl;return 0;}
试题 历届真题 皮亚诺曲线距离【第十一届】【决赛】【C组】相关推荐
- 蓝桥杯2020年第十一届国赛真题-皮亚诺曲线距离
我找不到满分题解,结果我肝一个下午肝出来了,有一说一,在考场碰到这题估计要没,今年国赛加油把,方法过于暴力,仅供参考 #include<iostream> #include<algo ...
- 2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“
2020年第十一届蓝桥杯决赛JAVA B G题"皮亚诺曲线距离" 2020国赛 JAVA B组 个人题解目录 [问题描述] 皮亚诺曲线是一条平面内的曲线. 下图给出了皮亚诺曲线的 ...
- 2020第十一届蓝桥杯国赛(决赛)C/C++ B组F题皮亚诺曲线距离题解
F: 皮亚诺曲线距离 [问题描述] 皮亚诺曲线是一条平面内的曲线. 下图给出了皮亚诺曲线的 1 阶情形,它是从左下角出发,经过一个 3 × 3 的方格中的每一个格子,最终到达右上角的一条曲线. 下图给 ...
- 蓝桥杯--历届真题 回文日期【第十一届】【省赛】【B组】
试题 历届真题 回文日期[第十一届][省赛][B组] 提交此题 评测记录 资源限制 时间限制:1.0s 内存限制:256.0MB 哎话说好久没写过日期题了,回忆起刚学的时候被日期统治的恐惧了
- 蓝桥杯第十一届决赛真题之皮亚诺曲线距离
蓝桥杯第十一届决赛真题之皮亚诺曲线距离python 借鉴了https://www.cnblogs.com/EchoZQN/p/14829144.html的做法 然而同样的想法,python代码提交之后 ...
- 试题 历届真题 魔方旋转问题【历届真题】【决赛】【高职组】
这道题评测有点问题(评测点的输出全正确,结果正确率0%) 试题 历届真题 魔方旋转问题[历届真题][决赛][高职组] 资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制 ...
- 【题解】【蓝桥杯】试题 历届真题 砝码称重【第十二届】【省赛】【B组】
题目链接 试题 历届真题 砝码称重[第十二届][省赛][B组] 题目描述 解题思路 暴力,两个map,分别存储当前能称出的重量和遍历时用于计算的重量 需要注意的三点是 abs函数是在math.h里面的 ...
- 蓝桥-皮亚诺曲线距离
求解皮亚诺曲线距离 [问题描述] 皮亚诺曲线是一条平面内的曲线. 下图给出了皮亚诺曲线的 1 阶情形,它是从左下角出发,经过一个 3 × 3 的方格中的每一个格子,最终到达右上角的一条曲线. 下 ...
- 蓝桥杯【第十一届】【决赛】F皮亚诺曲线距离 + G出租车
题目地址 官网地址 F皮亚诺曲线距离 找规律的题目,应该有各种各样的方法来做 (代码写完才发现我的x,y和题目是反过来的qwq, 不过都一样) (顺带吐槽一下,为啥不用写高精度就能过,题目里只是要求答 ...
最新文章
- Chrome之排序问题
- 【leetcode❤python】 9. Palindrome Number
- 如何参悟Java的三大框架
- Storm精华问答 | 遇到这些错误日志该如何解决?
- XUtils BitmapUtils 改造以加入drawable支持
- 古老的txt下传和txt上载
- Android 应用程序之间数据共享—ContentProvider
- 酒店订房管理系统php,酒店预定管理系统(源码+数据库+文档)
- Java job interview:项目架构研发京东大数据价值最大化的应用实践
- Python学习-通过斗鱼api获取弹幕
- 未来计算机畅想英语作文,畅想未来的生活英语作文
- html excel 在线查看,web在线查看服务器的Excel文件
- 使用Cobbler批量部署Linux和Windows
- 专访SegmentFault开发团队:垂直问答社区的架构升级
- 利用matlab快速实现连续系统转变为离散系统(z变换)
- Android开发快速入门及导出apk
- fat文件系统基础知识
- Day1.数据可视化-Python语法
- RuntimeError: Found dtype Long but expected Float
- 我的世界1.13 mod制作——制作一个Item(二)