HDOJ 1030 Delta-wave

题目:
Problem Description
A triangle field is numbered with successive integers in the way shown on the picture below.



The traveller needs to go from the cell with number M to the cell with number N. The traveller is able to enter the cell through cell edges only, he can not travel from cell to cell through vertices. The number of edges the traveller passes makes the length of the traveller's route.

Write the program to determine the length of the shortest route connecting cells with numbers N and M.

Input
Input contains two integer numbers M and N in the range from 1 to 1000000000 separated with space(s).

Output
Output should contain the length of the shortest route.

Sample Input
6 12

Sample Output
3

分析:
此题要求从m到n在三角形中移动,找到最短距离。主要通过找规律。
1、规定统一方向,令较小值去找较大值。
2、求行数跳转所需的路径长度。令较小值跳转到较大值所在的行。
a.如果起始值的列为奇数,则可直接跳转到下一行。
b.行跳转的路径 = 2 X (较大值所在行 - 较小值所在行 + 1) + 1
c.较小值所在列为偶数时比奇数多1

3、求同行中,较小值移动到较大值所需的最短路径数。
a.较小值按照一直向斜向左下方移动,得到在行移动固定长度的移动数量的情况下的最左值。
b.同理,如果一直向斜向右下方移动,得到最右值。
c.如果较大值的列,在[列最大值, 列最右值]区间中,就判断是否为奇数列,是长度加1,否则直接返回已有长度。
d.如果不在该区间,就计算较大值所在的列离区间的最近的长度加到ans(已经移动的长度),返回ans
代码:
#include <iostream>
#include <cmath>
using namespace std;
int x, y;
void getLocal(int s, int& rx, int& ry)
{rx = (int)(ceil(sqrt(s)));int left = rx*rx - 2*rx + 2;ry = s - left + 1;
}
int getShortLen()
{int ans = 0;int rx, cx, ry, cy;getLocal(x, rx, cx);getLocal(y, ry, cy);if(rx == ry){return abs(cx - cy);}	ans += 2 * (ry - rx -1) + 1;	//求出行跳转的数量int left = cx  + 1;int right = cx + 2 * (ry-rx) - 1;if(!(cx%2))	//偶数比奇数列多1{ans++;left--;right++;}if(cy >= left && cy <= right){if(cy%2){return ans+1;}else{return ans;}}else{ans += min(abs(cy-left), abs(cy-right));return ans;}
}
int main(void)
{int temp;while(cin >> x >> y){int ans = 0;if(x > y){temp = x;x    = y;y    = temp;}ans = getShortLen();cout << ans << endl;}return 0;
}


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

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

相关文章

工厂模式个人案例_工厂设计模式案例研究

工厂模式个人案例我有一份工作来检查我们的项目代码质量。 如果我在项目中发现任何障碍&#xff0c;必须将其报告给我的团队负责人。 我发现了很多漏洞&#xff0c;我认为可以在博客上进行讨论。 不是嘲笑作者&#xff0c;而是一起学习和改进自己。 像这段代码一样&#xff0c;…

用Matlab实现字符串分割(split)

我们在这里借助正则表达式函数regexp的split模式。一般语法&#xff1a; S regexp(str, char, split) 其中str是待分割的字符串&#xff0c;char是作为分隔符的字符&#xff08;可以使用正则表达式&#xff09;。分割出的结果存在S中。 以下面这样一串字符为例 Hello N…

阅读笔记:基础知识(Java篇)

1. GC机制&#xff08;垃圾回收机制&#xff09; 找到垃圾的方法&#xff1a;引用计数法、可达性分析法 回收垃圾的方法&#xff1a;标记清除算法、复制算法、标记整理法、分代算法2. JVM内存划分 线程私有&#xff1a;程序计数器、JVM虚拟机栈、本地方法栈线程公有&#xff1a…

oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战

引言&#xff1a;《异构数据源的CDC实时同步系统》 系列第一篇 (已完成)《零编码打造异构数据实时同步系统——异构数据源CDC之2》 系列第二篇(已完成)《零编码打造异构数据实时同步系统——异构数据源CDC之3》 系列第三篇(已完成)《异构数据源的CDC实时同步系统——最终选型实…

使用DynamoDBMapper插入DynamoDB项目

在上一篇文章中&#xff0c;我们使用DynamoDBMapper来将DynamoDB表映射到Java对象。 插入时&#xff0c;我们的动作几乎相同&#xff0c;但是方式更方便。 为了插入项目&#xff0c;您要做的就是使用对象映射器持久化对象 在我们的例子中&#xff0c;我们将创建一个执行简单插…

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器,sqlserver

今早开机发现&#xff0c;打开SQL Server 2008 的 SQL Server Management Studio&#xff0c;输入sa的密码发现&#xff0c;无法登陆数据库&#xff1f;提示以下错误&#xff1a; “在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请…

matlab 与数据库操作

第一部分&#xff1a;读取数据其相关信息查看 1. 配置数据源 &#xff08;1&#xff09;.“控制面板”----“管理工具”——“数据源&#xff08;ODBC&#xff09;”——“添加”——“创建数据源名称和选择数据库文件”。具体操作见数据源配置&#xff1a; http://blog.c…

PHP05

php05 1、音乐案例删除部分 1&#xff09;通过执行某些PHP代码获取到指定的数据&#xff0c;填充到html的指定位置 accept属性也可以直接写扩展名,多个扩展名间用英文的逗号分隔 accept".lrc" 允许选中多个文件&#xff0c;文件域属性&#xff1a;multiple 直接写该属…

算术运算导致溢出_CPU的控制器与运算器

计算机基础方面的知识&#xff0c;对于一些非科班出身的同学来讲&#xff0c;一直是他们心中的痛&#xff0c;而对于科班出身的同学&#xff0c;很多同学在工作之后&#xff0c;也意识到自身所学知识的不足与欠缺&#xff0c;想回头补补基础知识。关于计算机基础的课程很多&…

Windows下,Netbeans使用C++的配置方法

如果尚未安装 NetBeans IDE&#xff0c;请转至http://www.netbeans.org/community/releases/&#xff0c;然后下载包含最近的 C/C 支持的 IDE 版本。 如果已安装 NetBeans IDE 但未包含 C/C 支持&#xff0c;请完成以下步骤为 IDE 添加 C/C 支持。 从主菜单中选择“工具”>“…

为了简单起见,Arquillian Chameleon

使用Arquillian时&#xff0c;您需要做的一件事就是定义要在哪个容器下执行所有测试。 这是通过在适配器的类路径中添加依赖项并取决于所使用的模式&#xff08;嵌入式&#xff0c;托管或远程&#xff09;来下载的来完成的。 手动安装应用程序服务器。 例如&#xff0c;当在嵌…

matlab 读取文件夹底下所有txt文件

读取matlab 文件夹底下所有的txt 文件包括子文件夹底下的文件。 dirsdir(H:\DCE); for i1:length(dirs); if (dirs(i).isdir && ~strcmp(dirs(i).name,.) && ~strcmp(dirs(i).name,..) ) str_path[H:\DCE\, dirs(i).name]; filedir([str_path,\*.txt]);…

BZOJ4856 JSOI2016 病毒感染 区间DP

传送门 原Word文档 题意&#xff1a;太长不给 这种题目一看就是区间DP 设$f_i$表示治愈了前$i$个村子的时候最少死了多少村民&#xff0c;又设前缀和为$sum_i$&#xff0c;通过枚举折返时最后经过的村子$j$&#xff0c;并且提前计算$i1$到$N$中死的村民数量&#xff0c;可以得到…

go get 的不再src目录中_Go 每日一库之 sqlc:根据 sql 生成代码

简介在 Go 语言中编写数据库操作代码真的非常痛苦&#xff01;database/sql标准库提供的都是比较底层的接口。我们需要编写大量重复的代码。大量的模板代码不仅写起来烦&#xff0c;而且还容易出错。有时候字段类型修改了一下&#xff0c;可能就需要改动很多地方&#xff1b;添…

查看linux服务器的系统信息

查看linux服务器的系统信息新接手了几台linux的服务器,第一步当然是要了解这些服务器的软硬件配置.现在就写出我这次用的一些命令.首先当然要取得机器的IP,用户名和密码(呵呵,不知道就找原来的管理员要哈)登陆之后,首先看到的就是机器的名称,一般提示符就有了,如[rootlocalhost…

Windows下更改MySQL数据库的存储位置

一.同一主机下位置的转移 在mysql安装完成后&#xff0c;要修改数据库存储的位置&#xff0c;比如从安装目录下的C:\Program Files\MySQL\MySQL Server 5.0\Data文件夹转移到D:\mySQLData文件夹。 1、在D:\下新建mySQLData文件夹 2、停止MySQL服务&#xff0c;将C:\Program Fil…

apk去除签名验证工具安卓版_App 签名过期或泄露怎么办?别担心,Google 已经给出解决方案!...

一、序在将 App 发布到市场之前&#xff0c;很重要的一个步骤就是为 APK 进行签名&#xff0c;大部分时候&#xff0c;这个操作隐藏在了打包的流程中&#xff0c;而不被我们注意到。签名的作用&#xff0c;除了证明 App 的所有权之外&#xff0c;还可以帮助 Android 市场和设备…

初入WEBOTS半个月来的一点总结

对于我这一个从十一假期结束后才刚刚接触webots的小白来说&#xff0c;webots简直就是一个噩梦。在这里记录一下噩梦的发展历程。 在最初安装webots时就遇到了麻烦。安装7.0.3总是出问题。程序找不到接入点。替换dll文件也没有用更新运行库也不行。最好索性重新买固态硬盘做了个…

skype 回放设备出现问题

最近用skype拨打电话换台电脑会出现“回放设备出现问题”&#xff0c;拨通号码后会自动跳掉无法拨通 一直更新声音驱动器&#xff0c;结果发现跟声卡驱动半毛钱关系都没有&#xff0c;是要插入耳麦。

sonar java_修复Sonar中常见的Java安全代码冲突

sonar java本文旨在向您展示如何快速修复最常见的Java安全代码冲突。 它假定您熟悉代码规则和违规的概念以及Sonar如何对其进行报告。 但是&#xff0c;如果您以前从未听过这些术语&#xff0c;则可以阅读Sonar Concepts或即将出版的有关Sonar的书 &#xff0c;以获取更详细的解…