求助

P1228 地毯填补问题

defense @ 2020-08-27 21:45:12

蒟蒻爆零求助/dk

#include<bits/stdc++.h>
using namespace std;
#define MAX 1025
int k, x, y;
int mp[MAX][MAX];
int d1[5], d2[5];
bool vis[MAX][MAX];
void give(int xx, int yy){
    d1[1] = xx; d2[1] = yy;
    d1[2] = xx + 1; d2[2] = yy;
    d1[3] = xx; d2[3] = yy - 1;
    d1[4] = xx + 1; d2[4] = yy - 1;
}

void dg(int x1, int y1, int x2, int y2, int len){
    int xx =  (x1 + x2)/2, yy = (y1 + y2)/2;
    give(xx, yy);
    if(len == 0){
        return;
    }
    len >>= 1;  
    dg(x1, y1, xx, yy, len); dg(xx, y1, x2, yy, len); dg(x1, yy, xx, y2, len); dg(xx, yy, x2, y2, len);
    for(int i = 1; i <= 4; i++){
        if(mp[d1[i]][d2[i]] != 0 ){
            for(int j = 1; j <= 4; j++){
                if(j == i) continue;
                mp[d1[j]][d2[j]] = i;
            }
            printf("%d %d %d\n", d1[5 - i], d2[5 - i], i);
            break;
        }
    } 

    return;
}
int main(){
    scanf("%d%d%d",&k, &x, &y);
    mp[x][y] = 1;
    dg(0, 0, (1 << k), (1 << k), (1 << k));
    return 0;
} 

|