hdoj 1030
来源:互联网 发布:mac水漾轻盈粉底液色号 编辑:程序博客网 时间:2024/05/17 02:34
写了一整天的程序。
分三种情况:1 终点在起点所在顶点大三角形里 2 左方 3右方。
在大三角形内则必定通过下方第一个三角形的顶点 则至终点在其边上。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int M,N,t;
int m,n,a,b,A_L,A_R,B_L,B_R,Distan,temp;
while (scanf("%d%d",&M,&N)!=EOF)
{
if(M>N) //M<N
{
t=M;M=N;N=t;
}
m=int(sqrt(double(M-1)))+1; //第m,n层
n=int(sqrt(double(N-1)))+1;
if(m==n)
Distan=N-M;
else
{
a=M-(m-1)*(m-1); //第m层第a个 第n层第b个
b=N-(n-1)*(n-1);
A_L=(a-1)/2+1; //第n层第A_L个左菱形 第A_R个右菱形
A_R=a/2+n-m;
B_L=(b-1)/2+1; //第n层第B_L个左菱形 第B_R个右菱形
B_R=b/2;
if(A_L>=B_L)
{
t=(n-1)*(n-1)+2*A_L;
if((m%2==0 && M%2==0) || (m%2==1 && M%2==1))
Distan=2*(n-m)-1;
else
Distan=2*(n-m);
Distan+=(t-N);
}
else if(B_R>=A_R)
{
t=(n-1)*(n-1)+A_R*2;
if((m%2==0 && M%2==0) || (m%2==1 && M%2==1))
Distan=2*(n-m)-1;
else
Distan=2*(n-m);
Distan+=(N-t);
}
else
{
if((m%2==0 && M%2==0) || (m%2==1 && M%2==1))
{ Distan=4, a+=2; M=(m+1)*(m+1)+a, m+=2;}
else
{ Distan=3 ;M=m*m+a+1; m+=1 ,a+=1;}
A_L=(a-1)/2+1;
A_R=a/2+n-m;
while(A_L<B_L && A_R>B_R)
{
Distan+=4;
a+=2;
M=(m+1)*(m+1)+a;
m+=2;
A_L=(a-1)/2+1;
A_R=a/2+n-m;
}
if(N>M)
{
Distan+=(2*(n-m)-1);
temp=(n-1)*(n-1)+A_L*2;
t=(n-1)*(n-1)+A_R*2;
if(N<=temp)
Distan+=abs(N-temp);
else
Distan+=abs(N-t);
}
}
}
printf("%d/n",Distan);
}
return 0;
}
- hdoj 1030
- HDOJ 1030 Delta-wave
- HDOJ
- hdoj
- hdoj
- HDOJ
- hdoj 1030 Delta-wave 【基础】
- HDOJ HDU 1030 Delta-wave
- hdoj 1030 Delta-wave(3坐标)
- hdoj 1568 && hdoj 5344 && hdoj 5444
- 杭电OJ(HDOJ)1030题:Delta-wave
- HDOJ 2176
- Hdoj--1272
- hdoj 1003
- hdoj 1005
- hdoj 2154
- hdoj 2100
- HDOJ 1106
- 利用RegisterWindowMessage在不同程序窗体间传递消息
- 何处是我朋友的家
- SAX解析xml文件
- pager-taglib分页标签使用方法
- 专家否认黑木耳可替代阿司匹林说法
- hdoj 1030
- 二、扣篮那些事儿
- des解密
- [未AC]HDU1002
- ShellExecute与ShellExecuteEx的用法
- TableView中图片的延时加载
- 研究发现适量喝啤酒可增进骨骼健康
- HTTP状态码
- 一个老公写给老婆的年终总结