首页 > 其他 > 详细

玛艾露贝莉·赫恩

时间:2020-07-12 15:26:48      阅读:50      评论:0      收藏:0      [点我收藏+]

题目描述

技术分享图片

输入

第一行,包含两个整数 X 和 Y,表示起点和终点的标号。

输出

一行,包含一个数,表示两个区域之间的距离。

样例输入

19 30

样例输出

5

提示

保证 X; Y <= 10000。

#include<bits/stdc++.h>
using namespace std;
const int N=10001;
int n,m,x,y,a[N];
int qx,qy,hx,hy,fx,fy,dx,dy;
int q(int x)
{
    int s=1;
    for(int i=0;i<x;i++)
    {
        s+=6*i;
        if(s>=x)
            return i;
    }
}
int h(int x,int k)
{
    if(x>=a[k]-k) return k;
    else if(x>=a[k]-3*k) return k-(a[k]-k-x);
    else if(x>=a[k]-4*k) return -k;
    else return -k+a[k]-k*4-x;
}
int f(int x,int k)
{
    if(x>=a[k]-k) return k-(a[k]-x)*2;
    else if(x>=a[k]-2*k) return -k-(a[k]-k-x);
    else if(x>=a[k]-3*k) return -k*2+(a[k]-k*2-x);
    else if(x>=a[k]-4*k) return -k+(a[k]-k*3-x)*2;
    else if(x>=a[k]-5*k) return k+(a[k]-k*4-x);
    else return k*2-(a[k]-k*5-x);
}
int main()
{
    scanf("%d%d",&x,&y);
    a[0]=1;
    for(int i=1;a[i-1]<N;i++)
        a[i]=a[i-1]+6*i;
    qx=q(x),qy=q(y);
    hx=h(x,qx),hy=h(y,qy);
    fx=f(x,qx),fy=f(y,qy);
    dx=abs(hx-hy),dy=abs(fx-fy);
    if(dx>=dy)
        printf("%d",dx);
    else
    {
        m=dx,dy-=dx;
        printf("%d",m+(dy+1)/2);
    }
    return 0;
}

玛艾露贝莉·赫恩

原文:https://www.cnblogs.com/LJA001162/p/13288025.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!