跳转链接
https://www.acwing.com/problem/content/1239/ 来源:第九届蓝桥杯省赛C++B组,第九届蓝桥杯省赛JAVAB组
题目描述
如下图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点 (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
题解思路

代码
cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
int x, y;
cin >> x >> y;
if(abs(x) <= y && y > 0) // 在上方
{
int n = y;
cout << (LL)(2 * n - 1) * (2 * n) + x - (-n) << endl;
}
else if(abs(y) <= x && x > 0) // 在右方
{
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) << endl;
}
return 0;
}
