用的题解一的方法 为什么就对一个?

P1228 地毯填补问题

telankesi @ 2022-12-14 21:28:17


#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);
    }
}

by saikrilll @ 2023-02-05 21:25:15

我也不知道呀,可能太长了


by blsya23a2 @ 2023-07-18 16:25:44

《太长了》


|