版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/belous_zxy/article/details/84072457
如图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。
例如dis(0, 1)=3, dis(-2, -1)=9
给出整点坐标(X, Y),你能计算出dis(X, Y)吗?
【输入格式】 X和Y 对于40%的数据,-1000 <= X, Y <= 1000 对于70%的数据,-100000 <= X, Y <= 100000 对于100%的数据, -1000000000 <= X, Y <= 1000000000
【输出格式】 输出dis(X, Y)
【样例输入】
0 1
【样例输出】
3
先计算出点在哪一层(设为sp),以右上角点作为根据点,根据点距离op是 4^sp 。
y>x op-(sp-x)-(sp-y)
x>y op+(sp-x)+(sp-y)
x==y&&x>0 op
x==y&&x<0 op+(sp-x)+(sp-y)
另:x==0&&y==0 0
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAX(a,b) (a>b?(a):(b))
//#define HOST
int main(int argc,char **argv)
{
#ifdef HOST
freopen("input.txt","r",stdin);
#endif
int x,y,sp,op;
scanf("%d%d",&x,&y);
sp=MAX(abs(x),abs(y));
op=(int)pow(4.0,sp);
if(x==y&&x==0)
printf("0\n");
else if(x==y&&x>0)
printf("%d\n",op);
else if(y>x)
printf("%d\n",op-(sp-x)-(sp-y));
else
printf("%d\n",op+(sp-x)+(sp-y));
return EXIT_SUCCESS;
}