瑪艾露貝莉·赫恩
阿新 • • 發佈:2020-07-12
題目描述
輸入
第一行,包含兩個整數 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; }