题目描述
如图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。
例如dis(0, 1)=3, dis(-2, -1)=9
给出整点坐标(X, Y),你能计算出dis(X, Y)吗?
输入格式】
对于100%的数据, -1000000000 <= X, Y <= 1000000000
【输出格式】
输出dis(X, Y)
【样例输入】
0 1
【样例输出】
3
思路:
先找规律你会发现右上角的那个点满足公式为Dis(x,y)=4xy;所以我们可以从这一点出发来寻找问题的答案。
首先我们先找出这个点位于那一层,然后我们将这个图根据y=x这条直线分隔开来,即分别判断有y>x 和 y<x 和y=x这三种情况
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void)
{
ll x,y,a;
scanf("%lld%lld",&x,&y);
a=max(abs(x),abs(y));
ll t=4*a*a;
if(x==y&&x==0)printf("0\n");
else if(x==y&&x>0)printf("%lld\n",t);
else if(y>x)printf("%lld\n",t-(a-x)-(a-y));
else printf("%lld\n",t+(a-x)+a-y);
return 0;
}