1030
2016-01-05 23:14
330 查看
Delta-wave
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7091 Accepted Submission(s): 2739
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
总之先建立个
4000
坐标系吧
这样建系,可以看出一个点要到第二个点只用先沿着坐标系走,然后再走相距的层数就行了
于是答案就是△x+△y+△row
row=(int)sqrt(n-1);
x=(n-row*row-1)/2;
y=((row+1)*(row+1)-n)/2;
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int n,m;
int x_1,x_2,y_1,y_2;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
while(scanf("%d%d",&n,&m)==2)
{
int row_1=(int)sqrt(n-1);
x_1=(n-row_1*row_1-1)/2;
y_1=((row_1+1)*(row_1+1)-n)/2;
int row_2=(int)sqrt(m-1);
x_2=(m-row_2*row_2-1)/2;
y_2=((row_2+1)*(row_2+1)-m)/2;
printf("%d\n",abs(x_1-x_2)+abs(y_1-y_2)+abs(row_1-row_2));
}
return 0;
}
相关文章推荐
- 2016-1-5-Thinking in Java 读书笔记(二) --一切都是对象
- yum 源升级
- 2016的计划列表
- iOS 屏幕适配
- UML系列,使用UML实现GOF Design patterns,常用模式类图解读
- python 并发执行之多线程
- volatile编写多线程程序的好帮手
- iOS 实现背景颜色渐变的方式
- TinyOS08:在Avrora上运行Sentomist的三个实验
- 基于ATmega16单片机 NRF24L01无线收发驱动程序源代码
- tomcat双向认证
- MySQL学习笔记之一:数据库基础理论及客户端工具的使用
- 编写高质量代码--改善python程序的建议(四)
- SQL Server 表变量和临时表的区别
- 线段树两题复习(单点更新,区间更新)
- Sql Server 中的select(*)和select【字段名】性能的比较
- linux下的读写锁pthread_mutex使用方法
- java语言编程汇总
- slf4j 日志
- Sql Server中的 SET ANSI_NULLS