您的位置:首页 > 其它

hdu 1030 Delta-wave

2016-04-04 11:27 253 查看

Delta-wave

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7539 Accepted Submission(s):
2914


[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
Input contains two integer numbers M and N in the range
from 1 to 1000000000 separated with space(s).

[align=left]Output[/align]
Output should contain the length of the shortest
route.

[align=left]Sample Input[/align]

6
12

[align=left]Sample Output[/align]

3

[align=left]Source[/align]
Ural
Collegiate Programming Contest 1998

[align=left]Recommend[/align]
lcy | We have carefully selected several similar
problems for you: 1035 1071 1032 1031 1041

很简单的题,弄懂题意,很容易写。

题意:求给出的两个数字所在表中的位置的距离。
详见大神的博客:http://www.cnblogs.com/ACMan/archive/2012/05/30/2526798.html

附上代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int abs(int a)
{
return a>0?a:-a;
}
int main()
{
int n,m,i,j,cm,cn,rm,rn,lm,ln;
while(~scanf("%d%d",&m,&n))
{
cm=(int)ceil(sqrt(m));//ceil为向上取整函数“math.h”
cn=(int)ceil(sqrt(n));
rm=(m-(cm-1)*(cm-1)-1)/2+1;
rn=(n-(cn-1)*(cn-1)-1)/2+1;
lm=(cm*cm-m)/2+1;
ln=(cn*cn-n)/2+1;
int sum=(int)abs(cm-cn)+abs(rm-rn)+abs(lm-ln);
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: