Problem - 279A - Codeforces(找规律)

96 阅读1分钟
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).

Input
The first line contains two space-separated integers x and y (|x|, |y| ≤ 100).

Output
Print a single integer, showing how many times Valera has to turn.

Example
Input
0 0
Output
0
Input
1 0
Output
0
Input
0 1
Output
2
Input
-1 -1
Output
3


\

思路:将每个正方形补完整,根据所求坐标所在正方形即可计算。

#include<iostream>
#include<cstdio> 
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
	int x, y, sum =0;
		scanf("%d%d", &x, &y);
	
		if(x == 0 && y ==0)
			puts("0");
		else{
			if(y == 1 - x && x >= 1)
				printf("%d\n", (x - 1) * 4);
			else{
				int n = max(abs(x), abs(y));
			//	cout<<"n =="<<n<<endl; 
				sum = (n - 1) * 4;
				if(x == n && y != -n) 
					printf("%d\n", sum + 1);
				else if(y ==n)
					printf("%d\n", sum + 2); 
				else if(x == -n)
					printf("%d\n", sum + 3);
				else if(y == -n)
					printf("%d\n", sum + 4);  
			}
		}
	
		
	return 0;
}


\

本文已参与「新人创作礼」活动,一起开启掘金创作之路