蓝桥杯:2018年第九届蓝桥杯省赛B组第七题—螺旋折线

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/belous_zxy/article/details/84072457