HDUOJ----(1030)Delta-wave
Delta-wave
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4684 Accepted Submission(s): 1777
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
Source
Ural Collegiate Programming Contest 1998
比如6 16 向右移一格..经过两条边即可...然后将其分层,确定他们的行列来计算相应的值即可。。哎呀,说不清了..
来看代码ba!。。
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cstdlib>
5 #include<cmath>
6 using namespace std;
7 int sum(int m,int &cc)
8 {
9
10 int rr=(int)sqrt(1.0*m); //确定她所在第几行..一右边为参数
11 if(rr*rr!=m) rr++;
12 cc=rr*rr-m;
13 if(cc&1)
14 return 2*(rr-1);
15 else
16 return 2*rr-1;
17 }
18
19 int main()
20 {
21 int n,m,ncc,mcc,add;
22 while(cin>>m>>n)
23 {
24 int rankn=sum(n,ncc); //得到n的所在第几行
25 int rankm=sum(m,mcc); //得到m的所在第几行
26 ncc>>=1; //得到n所在第几列,以右边为参数
27 mcc>>=1; //得到m所在第几列,以右边为参数
28 //此处可以进一步优化...现在就不优化了..
29 if(rankn==rankm)
30 cout<<abs(n-m)<<endl;
31 else
32 if(rankn<rankm)
33 {
34
35 if(mcc>=ncc&&mcc<=(rankm-rankn)/2+ncc)
36 cout<<(rankm-rankn)<<endl;
37 else
38 {
39
40 if(2*mcc<(rankm-rankn)/2+2*ncc)
41 {
42 add=ncc-mcc;
43 cout<<2*add+(rankm-rankn)<<endl;
44 }
45 else
46 {
47 add=mcc-((rankm-rankn)/2+ncc);
48 cout<<2*add+(rankm-rankn)<<endl;
49 }
50
51 }
52 }
53 else
54 {
55 //rankn>rankm
56 if(ncc>=mcc&&ncc<=(rankn-rankm)/2+mcc)
57 cout<<(rankn-rankm)<<endl;
58 else
59 {
60 if(2*ncc<(rankn-rankm)/2+2*mcc)
61 {
62 add=mcc-ncc;
63 cout<<2*add+(rankn-rankm)<<endl;
64 }
65 else
66 {
67 add=ncc-((rankn-rankm)/2+mcc);
68 cout<<2*add+rankn-rankm<<endl;
69 }
70 }
71 }
72 /* cout<<0&1<<endl;*/
73 }
74
75 return 0;
76 }
- Batik渲染png图片异常的bug修复全程记录
- Web应用服务器安全:攻击、防护与检测
- 基于Go Packet实现网络数据包的捕获与分析
- 动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪
- Hive 时间转换函数使用心得
- Flume-Hbase-Sink针对不同版本flume与HBase的适配研究与经验总结
- 利用Flume 汇入数据到HBase:Flume-hbase-sink 使用方法详解
- 浅谈保证软件工程质量的一些心得体会
- 基于ELK的nginx-qps监控解决方案
- 2017年年度最烂密码排名
- 字符串方法汇总(三)
- 周鸿祎:“大安全”网络时代 需要AI大数据的技术支持
- 爆料:对扫码支付下手后,据说央行接下来要提高备付金,目标比例42%
- 回顾2017年5大科技突破,“时间晶体”充满想象!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法