60分求助,4,7,8WA,代码有注释
查看原帖
60分求助,4,7,8WA,代码有注释
459320
QRZ2814514743楼主2024/9/10 16:55
#include <bits/stdc++.h>
using namespace std;
#define LL long long



int main() {
	LL up = 2, right = 2, down = 1, left = 1;
	LL a, b, x = 1, y = -1;
	//a,b是输入的坐标
	//x,y在程序中是变动的坐标
	LL n = 6;
	//n是路径长度
	LL Cha = 0;
	//Cha是顶点和输入点的差值
	cin >> a >> b;
	if (a == -1 && b == 0) {
		cout << 1;
		return 0;
	}
	if (a == -1 && b == 1) {
		cout << 2;
		return 0;
	}
	if (a == 0 && b == 1) {
		cout << 3;
		return 0;
	}
	if (a == 1 && b == 1) {
		cout << 4;
		return 0;
	}
	if (a == 1 && b == 0) {
		cout << 5;
		return 0;
	}
	if (a == 1 && b == -1) {
		cout << 6;
		return 0;
	}
	//前六个特殊处理

	//从1,-1开始
	while (1) {
		down += 2;
		//下面的线每次长度比上次大2,故每次加2
		x -= down;
		//x坐标就是当前点位减当前线的长度
		n += down;
		//路径长度n增加
		if (b == y && a <= x && a >= x + n) {
			//当目标点在当前这条线上时(y坐标相同,x坐标在两端之间)
			Cha = a - x;
			//计算目标点和顶点的差值
			n = n - Cha;
			//减去差值
			goto l1;
			//输出答案
		}

		left += 2;
		y += left;
		n += left;
		if (x == a && b >= y - n && b <= y) {
			Cha = y - b;
			n = n - Cha;
			goto l1;
		}

		up += 2;
		x += up;
		n += up;
		if (y == b && a >= x - n && a <= x) {
			Cha = x - a;
			n = n - Cha;
			goto l1;
		}

		right += 2;
		y -= right;
		n += right;
		if (x == a && b >= y && b <= y + n) {
			Cha = b - y;
			n = n - Cha;
			goto l1;
		}
	}
l1:
	cout << n;
	return 0;
}
2024/9/10 16:55
加载中...