《Deltawave》解题报告.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《Deltawave》解题报告

Delta-wave(POJ2619) By sx349 【问题描述】 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 travellers route. 一个旅行者要从标记有M的格子穿行到标记有N的格子。旅行者只能从格子的边上进入格子。他不能穿过顶点从一个格子到另一个格子。旅行者穿过的边的数量就是这次旅行的路径长度 Write the program to determine the length of the shortest route connecting cells with numbers N and M. 给出一个程序来计算出从N到M的最短路径长度。 【输入】 Input contains two integer numbers M and N in the range from 1 to 1000000000 separated with space(s). 输入中包括两个在1到1000000000之间的整数M,N,由一个或多个空格分隔开。 【输出】 Output should contain the length of the shortest route. 输出需要包括最短路径的长度 【样例输入输出】 Sample Input Sample Output 6 12 3 【问题分析】 本题的大意为在上述三角形中求出任意两格最短路径上的边的数量。 显然选择的两格的先后顺序对问题的求解没有影响,那么假设读入的M与N满足MN。为了方便计算,将M与N重新表达为(C1,B1),(C2,B2),表示M是C1行的第B1个格子,即,同样的N是C2 行的B2个。 显然,如果C1=C2则M与N之间的距离即为B2-B1。 最简单的想法就是从起始点开始进行扩展,因为此时必然保证了C2〉C1,所以可以只进行向下方进行扩展。根据三角形可以抽象出如下的一张图: 对于某一个格子(A,B),若B是奇数,则必然是正三角形的格子,其后趋结点只有1个,就是(A+1,B+1);若B是偶数,那么就是倒三角形的格子,其后趋节点是原图中边上的两个字,即(A,B-1)和(A,B+1)。每在图中走过一条边则路径长度加1。显然,在到达C2层之前,我们都不需要在这个图中从下往上走,因为作为终点的格子在C2层,所以如果在之前向上走那么必然还要走下来,肯定不会是最优的。 于是我们可以一路走到了第C2层时,有可能会有以下三种情况: 终点在我们已搜索到范围的右侧。 终点在我们已搜索的范围内。 终点在我们已搜索的范围左侧。 中间一种情况,终点既然已经被搜索到,那么直接输出。 而前一种和后一种情况,显然只需要加上终点到最近的已搜索点的距离加上已搜索点的路径长度即可。 这样的时间和空间复杂度都在O(N),对于10^9的极限而言还是有些无法接受。但是从以上的结果中我们可以进行进一步探索。 我们将由(A,B)不断向下搜索所能搜索到的所有节点称为“控制范围”。 显然,最上面标有1的节点的控制范围是整个图,而如果这个图的层数是无限层的,那么对于任意一个结点(A,B),只要B是奇数,那么其控制范围的形状和整张图是自相似的。而如果B是偶数,那么我们可以将其上方的唯一前驱的点加入进来,转化为B为奇数的情况,在这种情况下,最终的答案应该要减去1。 如何求出结点(A,B)(B为奇数)控制范围在第C层中的部分?显然,最左侧依然还是第B个,因为在原三角形大图中,斜向上同一列所有正三角形的B相同,而(A,B)所能控制的最左侧只能到与它在同一斜列上,而经过归纳可知,最右侧能控制到的结点是(如图所示)。 我们再回头看上面三种情况: 如果终点在可控制范围内,那么分成两种,如果是倒三角形格,则从起点到终点的距离即为;反之如果是正三角形格,则从起点到终点的距离即为。 如果终点不在可控制范围内,那么我们可以计算出起点到控制范围最左、最右边上的格子的距离,再加上

您可能关注的文档

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档