Valera the horse lives on a plane. The Cartesian coordinate system is defined on this plane. Also an infinite spiral is painted on the plane. The spiral consists of segments:[(0, 0), (1, 0)], [(1, 0), (1, 1)], [(1, 1), ( - 1, 1)], [( - 1, 1), ( - 1, - 1)], [( - 1, - 1), (2, - 1)],[(2, - 1), (2, 2)] and so on. Thus, this infinite spiral passes through each integer point of the plane.
Valera the horse lives on the plane at coordinates (0, 0). He wants to walk along the spiral to point(x, y). Valera the horse has four legs, so he finds turning very difficult. Count how many times he will have to turn if he goes along a spiral from point(0, 0) to point (x, y).
The first line contains two space-separated integers x andy (|x|, |y| ≤ 100).
Print a single integer, showing how many times Valera has to turn.
0 0
0
1 0
0
0 1
2
-1 -1
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#define LL long long
using namespace std;
const int maxn = 1000000 + 5;
int main(){
int x,y;
while(cin >> x >> y){
if(x == 0 && y == 0) {
cout << 0 << endl;
continue;
}
int px = 0,py = 0;
int ans = 0;
while(1){
if(px == x && py == y) break;
else if(px == x && x > 0 && y < py && y > (-py+1)) break;
else if(py == y && y > 0 && x > px && x < -px) break;
else if(px == x && x < 0 && y > py && y < -py) break;
else if(py == y && y < 0 && x < px && x > (-px+1)) break;
if(px > 0 && py > 0){
px = -px;
ans++;
}
else if(px < 0 && py > 0){
py = -py;
ans++;
}
else if(px <= 0 && py <= 0){
px = -px + 1;
ans++;
}
else{
py = -py + 1;
ans++;
}
}
cout << ans-1 << endl;
}
return 0;
}
螺旋路径上的转向次数计算
本文介绍了一种算法,用于计算一匹名为Valera的马沿着平面坐标系上的无限螺旋路径从起点(0, 0)移动到目标点(x, y)时所需的转向次数。螺旋由一系列整数坐标段构成,覆盖了平面上的所有整数点。
6859

被折叠的 条评论
为什么被折叠?



