螺旋折线
对于整点 (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
思路:这题的数据范围已经到了10 ^9显然不能直接暴力模拟,需要寻找规律,将所有点按照上下左右四条边的方向来找规律,逐一判断。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int x,y;
int main(){
cin >> x>> y;
int n;
if(abs(x)<=y){ //上
n=y;
cout << (LL)(2*n-1)*(2*n)+x+n;
}
else if(abs(y)<=x){ //右
n=x;
cout << (LL)4*n*n+n-y;
}
else if(y<=(x+1)){ //下
n=abs(y);
cout << (LL)(2*n)*(2*n+1)+n-x;
}
else{ //左
n=abs(x);
cout << (LL)(2*n-1)*(2*n-1)+y+n-1;
}
return 0;
}