14分求调必关--分治

P1228 地毯填补问题

wawatime1 @ 2024-10-12 22:11:55

大佬快来看一下啊!!!

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

功德圆满


by __yun__ @ 2024-10-12 22:16:40

马蜂难评 一眼没加括号


by __yun__ @ 2024-10-12 22:18:51

@wawatime1


by wawatime1 @ 2024-10-12 22:28:50

@yun 我加了括号的,递归条件写错了,我已改正。

··· 求互关


|