14分求调必关--分治
查看原帖
14分求调必关--分治
1270926
wawatime1楼主2024/10/12 22:11

大佬快来看一下啊!!!

#include <bits/stdc++.h>
using namespace std;
int k, x, y;
void calc(int x, int y, int gx, int gy, int l) {
	if (l == 1)
		return;
	if (gx <= x + l / 2 - 1 && gy <= y + l / 2 - 1) {
		printf ("%d %d 1\n", x + l / 2, y + l / 2);
		calc (x, y, gx, gy, l / 2);
		calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
		calc (x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
		calc (x + l / 2, y + l / 2, x + l / 2, y + l / 2, l / 2);
	} else if (gx <= x + l / 2 - 1 && gy >= y + l / 2) {
		printf ("%d %d 2\n", x + l / 2, y + l / 2 - 1);
		calc (x, y, x + l / 2 - 1, y + l / 2 - 1, l / 2);
		calc (x, y + l / 2, gx, gy, l / 2);
		calc (x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
		calc (x + l / 2, y + l / 2, x + l / 2, y + l / 2, l / 2);
	} else if (gx >= x + l / 2 && gy <= y + l / 2 - 1) {
		printf ("%d %d 3\n", x + l / 2 - 1, y + l / 2);
		calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
		calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
		calc (x + l / 2, y, gx, gy, l / 2);
		calc (x + l / 2, y + l / 2, x + l / 2, y + l / 2, l / 2);
	} else if (gx >= x + l / 2 && gy >= y + l / 2) {
		printf ("%d %d 4\n", x + l / 2 - 1, y + l / 2 - 1);
		calc (x, y, x + l / 2 - 1, y + l / 2 - 1, l / 2);
		calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
		calc (x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
		calc (x + l / 2, y + l / 2, gx, gy, l / 2);
	}
}
int main () {
	scanf ("%d", &k);
	scanf ("%d%d", &x, &y);
	calc (1, 1, x, y, pow (2, k));
	return 0;
}

功德圆满

2024/10/12 22:11
加载中...