求助,测试点1过了,最后一个超时了,其他全wa

P1228 地毯填补问题

Botter @ 2024-02-29 17:20:23

//
// Created by Botter on 2024/2/29.
//
#include "iostream"
using namespace std;
int s,e,k;
#define zs dfs(x+n-1,y+n-1,x,y,n);
#define ys dfs(x+n-1,y+n,x,y+n,n);
#define zx dfs(x+n,y+n-1,x+n,y,n);
#define yx dfs(x+n,y+n,x+n,y+n,n);
void dfs(int sx , int sy , int x , int y , int n){
    if (n == 1) return; // 递归终止条件
    n >>= 1;
    if (sx - x < n && sy - y < n) {
        printf("%d %d 1\n" ,x+n, y+n);
        dfs(sx , sy , x , y , n);
        ys;zx;yx;
    }
    if (sx - x < n && sy - y >= n ){
        printf("%d %d 2\n" , x+n , y+n-1);
        zs;
        dfs(sx , sy , x, y+n ,n);
         zx; yx;
    }
    if (sx - x >= n && sy - y < n ){
        printf("%d %d 3\n" , x+n-1 , y+n);
        zs ; ys;
        dfs(sx , sy, x+n , y , n);
        yx;
    }
    if (sx - x >= n && sy - y >= n){
        printf("%d %d 4\n",x+n-1 , y+n-1);
        zs;ys;zx;
        dfs(sx , sy , x+n , y+n , n);

    }
}

int main(void){
    scanf("%d%d%d",&s,&e,&k);
    dfs(s,e,1,1,1<<k);
    return 0;
}

|