螺旋折线(找规律 + 准确取点优化分析 + 普通思路)【包含详细的思考过程】

news2024/10/6 0:09:46

螺旋折线

文章目录

  • 螺旋折线
    • 前言
    • 题目描述
    • 题目分析
      • 优化思路
      • 知识点补充【曼哈顿距离】
      • 代码
      • 未优化思路【笨方法】

前言

在写完题目查看题解的时候,被acwing大佬的思路所震撼,所以按照自己的理解将
大佬的思路复刻一遍展现给大家,同时丰富了内容,使得 0基础的小伙伴都能够看懂,此外还给出了自己的代码为大家当反面教材,喜欢的小伙伴可以点个关注啦!

题目描述

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

在这里插入图片描述

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

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

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

输入格式
包含两个整数 X,Y。

输出格式
输出一个整数,表示 dis(X,Y)。

数据范围
−109≤X,Y≤109
输入样例:
0 1
输出样例:
3

题目分析

优化思路

很明显,图形的构造是有规律的,站在编程的角度去审视,我们如何将整个图形划分为有规律的小块呢?
我们发现每一圈的许多点横纵坐标绝对值的最大值是相同的,我们依据此特点将这些点划分成一层,看图
在这里插入图片描述
现在我们分好层了,那么对于每一层而言,我们还要进行分析,那么怎么划分每一层使得我们的分析思路最简单呢?
从对称性入手,通过这样的手段使得每一层分化为近乎完整的两个部分

在这里插入图片描述
然后我们对关键的对称点分析,发现有:
在这里插入图片描述
发现规律:4 * n^2
对于对称点的左边那些目标点,那些点的长度为 4 * n^2 (对称点到目标点的曼哈顿距离)
对于对待点的右边那些目标点,那些点的长度为 4 * n^2 +(对称点到目标点的曼哈顿距离)

知识点补充【曼哈顿距离】

假设有两个点A(x1, y1)和B(x2, y2),则它们之间的曼哈顿距离可以用以下公式表示:

d = |x1 - x2| + |y1 - y2|

曼哈顿距离的名称源自纽约曼哈顿区的街道布局,因为在曼哈顿区,两点之间的最短路径是沿着网格状的街道行走,而不是直线距离。

曼哈顿距离在计算机科学和数据分析中经常被使用,特别是在图像处理、路线规划和聚类分析等领域。它的优点之一是计算简单快速,而且对于在坐标系中移动的物体来说更加直观。
在这里插入图片描述

代码

#include<iostream>
#include<cmath>
using namespace std;
typedef long long LL;//由于累加的数据过大,这里用
// long long 来进行存储
int main(){
    LL x,y;
    cin>>x>>y;
    LL n=max(abs(x),abs(y));
    if(y<=x){//这里判断是右边的部分
        cout<<4*n*n+abs(x-n)+abs(y-n)<<endl;
    }
    else{
        cout<<4*n*n-abs(x-n)-abs(y-n)<<endl;
    }
}

未优化思路【笨方法】

这里对每一层的划分是如下图所示:

在这里插入图片描述
只能对 9 / 15 个数据

#include<iostream>
#include<cmath>
using namespace std;
typedef long long LL;
int main(){
    int x,y;
    cin>>x>>y;
    LL res=0;
    int flag=0;
    if(x==0 && y==0){
        res=0;
    }
    else{
        
        flag=max(abs(x),abs(y));
        // cout<<abs(x)<<' '<<abs(y)<<endl;
        
        if(x==-flag && y>=-flag+1 && y<flag){
            res+=abs(x+flag)+abs(y+flag-1);
        }
        else if(y==flag && x>-flag && x<=flag){
            res+=abs(x+flag)+abs(y+flag-1);
        }
        else if(x==flag && y<flag && y>=-flag) res+=4*flag-1+flag-y;
        else if(y== -flag && x<flag && x>=-flag) res+=flag-x + 6*flag-1;
    }
    if(flag){
        for(int i=flag-1;i>=1;i--){
            res+=8*i-1;
        }
    }
    cout<<res+flag<<endl;
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

彩虹医疗器械彩超、内窥镜维修技能学习

近几年随着医疗行业的快速发展&#xff0c;医疗器械的需求量不断增加&#xff0c;同时对医疗器械的维修和保养需求也在不断增长随着医疗技术的不断进步&#xff0c;新型、复杂的医疗器械不断涌现&#xff0c;这对维修技术提出了更高的要求。加强技术研发是必经之路&#xff0c;…

Element Plus中Cascader 级联选择器(选择任意一级选项 - 更改下拉框选中方式)

组件原始选中&#xff1a;选择文字前面的单选按钮 现在更改为&#xff1a;隐藏单选按钮&#xff0c;点击文字进行选中 ① 给弹出内容的自定义类名(popper-class)&#xff1a; <el-cascader v-model"areaValue":options"areaOptions" :props"areaP…

算法刷题 week2

目录 week21. 二维数组中的查找题目题解(单调性扫描) O(nm) 2.替换空格题目题解(线性扫描) O(n)(双指针扫描) O(n) 3.从尾到头打印链表题目题解(遍历链表) O(n) week2 1. 二维数组中的查找 题目 题解 (单调性扫描) O(nm) 核心在于发现每个子矩阵右上角的数的性质&#xff1…

MySQL数据库技术笔记(1)

MySQL是一种关系数据库管理系统. 按照数据结构来组织、存储和管理数据的仓库. 数据库的发展&#xff1a; 1.层次模型存储&#xff1a;归为大类&#xff0c;分小类&#xff0c;也称树形结构 2.网状模型 3.关系模型&#xff1a;1对1的关系&#xff0c;1对多的关系&#xff0…

04目标检测-Two-stage的目标检测算法

目录 一、 深度学习目标检测算法介绍 二、 基于Two-stage的目标检测算法 三、Two-stage基本流程 四、Two-stage常见算法 五、Two-stage核心组件 1、Two-stage的两个核心组件 2、主干CNN网络设计原则 3、RPN网络 3.1 Faster R-CNN 网络结构 3.2 RPN&#xff08;Region…

安装rsa依赖库出现ERROR: No matching distribution found for rsa

通过安装离线包的方式安装python-rsa依赖包&#xff0c;出现错误 执行命令&#xff08;require 文件夹中是rsa-4.9.tar.gz文件&#xff0c;加粗&#xff0c;后面会用到&#xff09;pip install --no-index --find-link./require -r ./requirements.txt&#xff0c;出现以下错误…

Linux(CentOS)安装msf

目录 一、安装MSF 1.1 在线安装 1.2 离线安装 二、安装Postgresql数据库 一、安装MSF 1.1 在线安装 需要挂梯子&#xff01;挂完梯子需要reboot重启&#xff0c;多试几次就可以&#xff0c;国内网络我试了很久都不行。没条件没梯子的看1.2离线安装 cd /opt curl https://ra…

java springboot 如何实现小程序支付

今天给大家分享java小程序支付 首先我们学习任何东西要先看官网 下面是支付业务流程 我们具体用代码去实现上面的业务流程 功能截图 代码截图 pay(){//调用后台生成订单var orderNumber "20210101123456";var amount 0.01;WxPay.wxpay(app, amount, orderNumber…

Vue中的图像压缩与图片优化

Vue中的图像压缩与图片优化 在现代Web应用程序中&#xff0c;图像占据了大量的带宽和存储空间。因此&#xff0c;图像压缩和图片优化成为了开发者们不可或缺的任务之一。Vue.js作为一种流行的前端框架&#xff0c;提供了丰富的工具和生态系统&#xff0c;使图像处理变得更加简…

常用的管理方法论分享

在多年的软件研发团队管理过程中&#xff0c;我积累了一些方法&#xff0c;跟大家分享。 软件研发团队非常注重成本和效率&#xff0c;大多数管理者是从一线开发者升上去的。往往非常善于解决技术问题&#xff0c;但不知道如何管理下属&#xff0c;如何对待上级&#xff0c;如…

uniapp项目-HBuilderx打包问题

在项目中&#xff0c;有时候会有需求说要加一个文件前缀之类的&#xff0c; 比如&#xff1a;有些h5做映射时需要加一个项目名&#xff0c;那我们打包的时候就要在喷织文件做设置。 在manifest.json文件,把运行的基础路径改掉你所需要的就行了&#xff0c;默认d的是./

go开发之个人微信的二次开发

简要描述&#xff1a; 设置群公告 请求URL&#xff1a; http://域名地址/setChatRoomAnnouncement 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必…

短视频seo矩阵系统源码开发搭建--代用户发布视频能力

短视频SEO矩阵系统源码开发搭建的代用户发布视频能力&#xff0c;主要是指在系统平台上&#xff0c;允许用户将其创作的内容发布到指定的账号或平台&#xff0c;并设置好相关的标题、话题、锚点等信息。 一、搭建步骤及注意事项 确定使用场景。根据业务需求&#xff0c;确定该…

精品基于NET实现的课堂学分管理系统

《[含文档PPT源码等]精品基于NET实现的课堂学分管理系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发软件&#xff1a;VS 2017 &#xff08;版本2017以上即可&#xff0c;不能低于2017&#xff09; 数…

[qt]vs2022+qt5.13.2代码报错QChartView不明确

报错类似下面&#xff1a; 鼠标指上去错误代码显示QChartView不明确,解决方法 在xxx.ui对应的头文件包含”ui_xxx.h“的前方添加如下代码&#xff1a; #include <qchart.h> QT_CHARTS_USE_NAMESPACE

人力资源服务升级正当时,法大大助力佩信集团加速数字化

人力资源服务业是现代服务业的一个重要门类&#xff0c;在促进就业创业、提供人才服务方面发挥重要作用。同时面对产业转型升级、平台经济快速发展、企业用工成本提高等新形势&#xff0c;发展人力资源服务业对于促进社会化就业、更好发挥我国人力资源优势、服务经济社会发展具…

制定有效的开发规范:提升团队协作和代码质量的关键策略

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 引言 在现代软件开发中…

python基础复习-基本语法元素

目录 基础语法元素列表元组字典集合 变量名规范赋值方式输入输出程序格式注释 基础语法元素 列表 序列类型a[1,2,3,4,5]元素有位置顺序&#xff0c;通过位置访问&#xff1a;a[0] 元组 序列类型元素不支持修改&#xff08;元组&#xff1a;不可变的列表&#xff09;a(1,2,3…

SpringBoot-插件化以及springboot扩展接口

插件化常用的实现思路 spi机制&#xff0c;Service Provider Interface &#xff0c;是JDK内置的一种服务发现机制&#xff0c;SPI是一种动态替换扩展机制约定配置和目录&#xff0c;利用反射配合实现springboot中的Factories机制Java agent&#xff08;探针&#xff09;技术S…

深度对话|Sui在商业技术堆栈中的地位

近日&#xff0c;我们采访了Mysten Labs的商业产品总监Lola Oyelayo-Pearson&#xff0c;共同探讨了区块链技术如何为企业提供商业服务&#xff0c;以及为什么Sui特别适合这些用例。 1.请您简要介绍一下自己、您的角色以及您是如何开始涉足Web3领域的&#xff1f; 目前&#…