题目描述
如下图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点 (X,Y),我们定义它到原点的距离 dis(X,Y) 是从原点到 (X,Y) 的螺旋折线段的长度。
例如 dis(0,1)=3,dis(−2,−1)=9
给出整点坐标 (X,Y),你能计算出 dis(X,Y) 吗
输入格式
包含两个整数 X,Y。
输出格式
输出一个整数,表示 dis(X,Y)。
数据范围
$−10^9≤X,Y≤10^9$
样例
0 1
3
算法1
(找规律) $O(1)$
把每个螺旋线的左下角掰直,就会变成一系列的正方形周长相加。
这样只要算里面的正方形周长和加上最外面正方形的边长即可。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long LL;
LL x,y,res,maxv;
int main()
{
cin>>x>>y;
maxv=max(abs(x),abs(y));
res+=4*(maxv-1)*maxv;//里面的周长和
if(x==(1-maxv)&&y==(1-maxv))
cout<<res;//特殊情况
else if(x==(-maxv))//四个边长
cout<<(res+maxv+y);
else if(y==(maxv))
cout<<(res+2*maxv+maxv+x);
else if(x==maxv)
cout<<(res+4*maxv+maxv-y);
else if(y==(-maxv))
cout<<(res+6*maxv+maxv-x);
return 0;
}
-2 -2是24,题解有错误
-2 -2本来就是24吧
我的意思是。。。。。你的代码输出不是24
思路不错,但是我还是像指出一点错误
测试样例: -2,-2
显然没有考虑到x=y这种情况啊