用的题解一的方法 为什么就对一个?
查看原帖
用的题解一的方法 为什么就对一个?
866969
telankesi楼主2022/12/14 21:28
#include <stdio.h>
long long k, x, y;
long long t = 1;
void fun(long long  x, long long y, long long len, long long a, long long b);
int main()
{
	scanf("%lld", &k);
	scanf("%lld %lld", &x, &y);

	while (k!=0) {
		t *= 2;
		k--;
	}

	fun(x, y, t, 1, 1);
	return 0;
    
 }
void fun(long long  x, long long y, long long len, long long a, long long b) {
	if (len == 1)  return;
	if (x < a + len / 2 && y < b + len / 2) {
		printf("%lld %lld 1\n", a + len / 2 , b + len / 2 );
		fun(x ,y , len / 2, a, b);
		fun(a + len / 2-1 , b + len / 2 , len / 2, a, b+len/2);
		fun(a + len / 2 , b + len / 2 -1, len / 2, a+len/2, b);
		fun(a + len / 2 , b + len / 2 , len / 2, a+len/2, b+len/2);
	}
	else if (x < a + len / 2 && y >= b + len / 2) {
		printf("%lld %lld 2\n", a + len / 2 , b + len / 2 - 1);
		fun(a+len/2-1, b+len/2-1, len / 2, a, b);
		fun(x, y, len / 2, a, b + len / 2);
		fun(a + len / 2, b + len / 2 - 1, len / 2, a + len / 2, b);
		fun(a + len / 2, b + len / 2, len / 2, a + len / 2, b + len / 2);
	}
	else if (x >= a + len / 2 && y < b + len / 2) {
		printf("%lld %lld 3\n", a + len / 2 - 1, b + len / 2 );
		fun(a + len / 2 - 1, b + len / 2 - 1, len / 2, a, b);
		fun(a+len/2-1, y+len/2, len / 2, a, b + len / 2);
		fun(x , y, len / 2, a + len / 2, b);
		fun(a + len / 2, b + len / 2, len / 2, a + len / 2, b + len / 2);
	}
	else if (x >= a + len / 2 && y >= b + len / 2) {
		printf("%lld %lld 4\n", a + len / 2 -1, b + len / 2-1 );
		fun(a + len / 2 - 1, b + len / 2 - 1, len / 2, a, b);
		fun(a + len / 2 - 1, y + len / 2, len / 2, a, b + len / 2);
		fun(a + len / 2, b + len / 2 - 1, len / 2, a + len / 2, b);
		fun(x, y, len / 2, a + len / 2, b + len / 2);
	}
}
2022/12/14 21:28
加载中...