社区讨论
用的题解一的方法 为什么就对一个?
P1228地毯填补问题参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo3jkzvb
- 此快照首次捕获于
- 2023/10/24 07:41 2 年前
- 此快照最后确认于
- 2023/10/24 07:41 2 年前
CPP
#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);
}
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...