HDU 1030(三角数阵 数学)

Wesley13
• 阅读 883

题意是问在给定的三角形数阵中从一个数到另一个数所要跨过的边数。

最初的时候很迷,除了发现每层的数字个数与层数间的关系和每层数最后一个数与层数的关系外什么也没看出来,打算先求出数字所在的层数,然后计算到该层最后一个数要跨过的边数,由于各层最后一个数之间所跨过的边数与层数差有关(称层数距离),

因此可以求得一条路线:如图

 HDU 1030(三角数阵 数学)  

但两数间的最短路线依然求不到,感觉也不能用到每层最后一个数所跨边数作差,而层数距离也不一定会体现在最短路径中,比如 7 和 13 这一组,就只跨一条边即可。

借鉴了别人的博客,才知道了原图是要拆开看的:

HDU 1030(三角数阵 数学)         HDU 1030(三角数阵 数学)      HDU 1030(三角数阵 数学)

用这种方式分别分层之后,再去计算在每张图中跨过了多少层,然后对每张图中的层数差的绝对值求和即为结果。

另外,这道题很坑的一点是没说清楚输入有多少组,一直以为是只有一组,然后一直 wa...... 还是每次都让其输入到文件末靠谱一点。

代码如下:

HDU 1030(三角数阵 数学) HDU 1030(三角数阵 数学)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int getp(int n)
 4 {
 5 //    int i = 1;
 6 //    while(i * i < n) ++i;
 7 //    return i;
 8     return (int)ceil(sqrt(n));
 9 }
10 int main()
11 {
12     int m,n,pm,pn,pm1,pm2,pn1,pn2,ans;
13     while(~scanf("%d%d",&m,&n))
14     {
15         pm = getp(m);
16         pn = getp(n);
17         pm1 = ((m-(pm-1)*(pm-1)-1)>>1)+1;
18         pn1 = ((n-(pn-1)*(pn-1)-1)>>1)+1;
19         pm2 = ((pm*pm-m)>>1)+1;
20         pn2 = ((pn*pn-n)>>1)+1;
21         ans = abs(pm-pn) + abs(pm1-pn1) + abs(pm2-pn2);
22         printf("%d\n",ans);
23     }
24     return 0;
25 }

View Code

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Python进阶者 Python进阶者
3年前
用Python编程语言来实现阿姆斯特朗数的检查
一、什么是阿姆斯特朗数?如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。一个正整数称为阿姆斯特朗阶数。例:abcd...anbncndn...如果是3位的阿姆斯特朗数字,则每个数字的立方和等于该数字本身。例如:153111555333//153是一个阿姆斯特朗
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
2个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
DaLongggggg DaLongggggg
3年前
python刷题-杨辉三角形
问题描述杨辉三角形又称Pascal三角形,它的第i1行是(ab)i的展开式的系数。  它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。  下面给出了杨辉三角形的前4行:1111211331  给出n,输出它的前n行。输入格式输入包含一个数n。输出格式输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Karen110 Karen110
3年前
用Python编程语言来实现阿姆斯特朗数的检查
一、什么是阿姆斯特朗数?如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。一个正整数称为阿姆斯特朗阶数。例:abcd...anbncndn...如果是3位的阿姆斯特朗数字,则每个数字的立方和等于该数字本身。例如:153111555333//153是一个阿姆斯特朗数。二、案
Wesley13 Wesley13
2年前
ES6 新增的数组的方法
给定一个数组letlist\//wu:武力zhi:智力{id:1,name:'张飞',wu:97,zhi:10},{id:2,name:'诸葛亮',wu:55,zhi:99},{id:3,name:'赵云',wu:97,zhi:66},{id:4,na
Python进阶者 Python进阶者
8个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这