题目描述
如下图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点 (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)。
数据范围
−109≤X,Y≤109
输入样例:
0 1
输出样例:
3
C++ 代码
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
int x, y;
int main(){
cin >> x >> y;
if(abs(x) <= y){ //上面
int n = y;
cout << (LL)(2 * n - 1) * (2 * n) + x + n << endl;
}
else if(abs(y) <= x){ //右边
int n = x;
cout << (LL)(2 * n) * (2 * n) + n - y << endl;
}
else if((abs(x) <= abs(y) + 1) && (y < 0)){ //下面
int n = abs(y);
cout << (LL)(2 * n) * (2 * n + 1) + n - x << endl;
}
else{ //左面
int n = abs(x);
cout << (LL)(2 * n - 1) * (2 * n - 1) + y - (- n + 1);
}
return 0;
}