1. 程式人生 > 實用技巧 >瑪艾露貝莉·赫恩

瑪艾露貝莉·赫恩

題目描述

輸入

第一行,包含兩個整數 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; }