当前位置: 首页 > news >正文

[蓝桥杯]螺旋折线

螺旋折线

题目描述

如下图所示的螺旋折线经过平面上所有整点恰好一次。

对于整点 (X,Y)(X,Y),我们定义它到原点的距离 dis(X,Y)dis(X,Y) 是从原点到 (X,Y)(X,Y) 的螺旋折线段的长度。

例如 dis(0,1)=3,dis(−2,−1)=9dis(0,1)=3,dis(−2,−1)=9。

给出整点坐标 (X,Y)(X,Y),你能计算出 dis(X,Y)dis(X,Y) 吗?

输入描述

输入格式:

输入一行,XX 和 YY ,−109≤X,Y≤109−109≤X,Y≤109。

输出描述

输出 dis(X,Y)dis(X,Y)。

输入输出样例

示例

输入

0 1

输出

3

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 1966  |  总提交次数: 2580  |  通过率: 76.2%

难度: 中等   标签: 2018, 思维, 省赛

方法思路

题目要求计算螺旋折线上任意点 (X, Y) 到原点的折线长度。螺旋折线从原点 (0,0) 开始,以逆时针方向向外螺旋扩展。通过观察螺旋折线的规律,我们可以将问题分解为以下步骤:

  1. 确定点所在的层数:螺旋折线可以看作由多个正方形环组成,每个环对应一个层数。点 (X, Y) 所在的层数 n 是 |X| 和 |Y| 中的最大值,即 n = max(|X|, |Y|)

  2. 计算内层环的总长度:对于层数 n,所有内层环(即从第 0 层到第 n-1 层)的总长度是 4 * n * n(因为每个环的周长递增,内层环的总长度公式推导为 4n²)。

  3. 计算当前点在当前层的长度

    • 如果 X >= Y,则点在当前层中满足一定条件,长度增加 |X - n| + |Y - n|

    • 如果 X < Y,则点在当前层中满足另一条件,长度减少 |X - n| + |Y - n|

      #include <iostream>
      #include <cmath>
      #include <algorithm>
      using namespace std;
      typedef long long LL;int main() {LL x, y;cin >> x >> y;LL n = max(abs(x), abs(y));  // 确定点所在的层数if (x >= y) {// 点在当前层中满足 X >= Ycout << 4 * n * n + abs(x - n) + abs(y - n) << endl;} else {// 点在当前层中满足 X < Ycout << 4 * n * n - abs(x - n) - abs(y - n) << endl;}return 0;
      }

      代码解释

    • 输入处理:读取整数坐标 x 和 y

    • 确定层数:计算 n = max(|x|, |y|),表示点 (x, y) 所在的螺旋层。

    • 示例验证

    • 输入 (0, 1)n = max(0, 1) = 10 < 1,所以输出 4 * 1 * 1 - |0-1| - |1-1| = 4 - 1 - 0 = 3

    • 输入 (-2, -1)n = max(2, 1) = 2-2 < -1,所以输出 4 * 2 * 2 - | -2-2| - | -1-2| = 16 - 4 - 3 = 9

    • 输入 (1, 0)n = max(1, 0) = 11 >= 0,所以输出 4 * 1 * 1 + |1-1| + |0-1| = 4 + 0 + 1 = 5

    • 计算距离

      • 内层环总长度4 * n * n 表示所有内层环的折线总长度。

      • 当前层偏移量

        • 如果 x >= y,点在当前层的偏移量是 abs(x - n) + abs(y - n),因此总长度为 4 * n * n + abs(x - n) + abs(y - n)

        • 如果 x < y,点在当前层的偏移量是 - (abs(x - n) + abs(y - n)),因此总长度为 4 * n * n - abs(x - n) - abs(y - n)

    • 输出结果:根据上述条件计算并输出点 (x, y) 到原点的螺旋折线长度。

相关文章:

  • 43. 远程分布式测试实现
  • 搜索引擎2.0(based elasticsearch6.8)设计与实现细节(完整版)
  • 03 APP 自动化-定位元素工具元素定位
  • iOS —— UI 初探
  • docker、ctr、crictl命令简介与使用
  • PostgreSQL优化实践:从查询到架构的性能提升指南
  • DOCKER使用记录
  • 一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (一)
  • 计算机网络 TCP篇常见面试题总结
  • 邂逅Webpack和打包过程
  • 十四、【测试执行篇】让测试跑起来:API 接口测试执行器设计与实现 (后端执行逻辑)
  • 基于springboot的益智游戏系统的设计与实现
  • 安全漏洞修复导致SpringBoot2.7与Springfox不兼容
  • Excel to JSON 插件 2.4.0 版本更新
  • Docker Compose(容器编排)
  • 在Mathematica中可视化Root和Log函数
  • android lifeCycleOwner生命周期
  • vue3中的ref和reactive
  • vim 的基本使用
  • vue+mitt的简便使用
  • 室内设计培训网站/营销方案怎么写?
  • 沧州哪里有做网站的公司4000-/百度拉新推广平台
  • 电子邮箱网站建设/朝阳seo排名优化培训
  • 建设工程资料下载网站/新闻最近的大事10件
  • 康定网站建设公司/seo中文意思是
  • 自己做的网站怎么发布win7/培训网站建设