0分求助
查看原帖
0分求助
1036708
12345limengqi楼主2023/12/15 12:41
#include <iostream>
#include <cmath>
using namespace std;
#define ll long long
void h(ll x, ll y, ll gx, ll gy, ll l){
	if(l == 1){
		return;
	}
	if(gx <= x + l / 2 - 1 && gy <= y + l / 2 - 1){
		cout << x + l / 2 << " " << y + l / 2 << " " << 1 << endl;
		h(x, y, gx, gy, l / 2);
		h(x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
		h(x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
		h(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){
		cout << x + l / 2 << " " << y + l / 2 - 1 << " " << 2 << endl;
		h(x, y, x + l / 2 - 1, y + l / 2 - 1, l / 2);
		h(x, y + l / 2, gx, gy, y + l / 2);
		h(x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
		h(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){
		cout << x + l / 2 - 1 << " " << y + l / 2 << " " << 3 << endl;
		h(x, y, x + l / 2 - 1, y + l / 2 - 1, l / 2);
		h(x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
		h(x + l / 2, y, gx, gy, l / 2);
		h(x + l / 2, y + l / 2, x + l / 2, y + l / 2, l / 2); 
	}
	else if(gx >= x + l / 2 && gy >= y + l / 2){
		cout << x + l / 2 - 1 << " " << y + l / 2 - 1 << " " << 4 << endl;
		h(x, y, x + l / 2 - 1, y + l / 2 - 1, l / 2);
		h(x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
		h(x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
		h(x + l / 2, y + l / 2, gx, gy, l / 2); 
	}
	
}
ll a, x, y;
int main () {
	cin >> a >> x >> y;
	h(1, 1, x, y, pow(2, a));
	return 0;
}
2023/12/15 12:41
加载中...