0pts求助 样例输出自己检查没问题

P1228 地毯填补问题

AMIRIOX無暝 @ 2021-10-31 15:59:15

样例的输出可过(虽然不一样,但模拟了一下应该是可以过spj的)

但就告诉我越界

https://www.luogu.com.cn/record/61421095

有没有大佬知道我忽略啥了啊呜呜

#include <iostream>

#include <cstdio>

#include <cmath>

using namespace std;
// #define   (printf("fuck execute here\n"));

bool cxkpr(int lx, int ly, int k1, int prx, int pry){

    int bc=pow(2,k1-1)-1;

    if(prx>=lx && prx<=lx+bc && pry>=ly && pry<=ly+bc) return true;

    else return false;

}

// int a[2048][2048];

void fill(int k, int px, int py, int prx, int pry) {

    if(k==0) return;
    int bc=pow(2,k-1);

    if(cxkpr(px,py,k,prx,pry)) {

        printf("%d %d %d\n", px+bc,py+bc , 1);

        fill(k-1, px, py, prx, pry);

        fill(k-1, px+bc, py+bc, px+bc, py+bc);

        fill(k-1, px, py+bc, px+bc-1, py+bc);

        fill(k-1, px+bc, py, px+bc, py+bc-1);   

    }else if(cxkpr(px+bc, py+bc, k, prx,pry)) {

        //if(px==1 && py==1) { cout << k << endl; }
        printf("%d %d %d\n", px+bc-1,py+bc-1 , 4);

        fill(k-1, px, py, px+bc-1, py+bc-1);

        fill(k-1, px+bc, py+bc, prx, pry);

        fill(k-1, px, py+bc, px+bc-1, py+bc);

        fill(k-1, px+bc, py, px+bc, py+bc-1);   

    }else if(cxkpr(px+bc, py, k, prx, pry)) {   

        printf("%d %d %d\n", px+bc-1,py+bc , 2);

        fill(k-1, px, py, px+bc-1, py+bc-1);

        fill(k-1, px+bc, py+bc, px+bc, py+bc);

        fill(k-1, px, py+bc, px+bc-1, py+bc);

        fill(k-1, px+bc, py, prx, pry);

    }else if(cxkpr(px, py+bc, k, prx, pry)) {

        printf("%d %d %d\n", px+bc,py+bc-1 , 3);

        fill(k-1, px, py, px+bc-1, py+bc-1);

        fill(k-1, px+bc, py+bc, px+bc, py+bc);

        fill(k-1, px, py+bc, prx, pry);

        fill(k-1, px+bc, py, px+bc, py+bc-1);           

    }   

}

using namespace std;

int main() {

    int k, x, y;

    cin >> k >> x >> y;

    fill(k, 1, 1, x, y);

    return 0;

}

by AMIRIOX無暝 @ 2021-10-31 16:02:02

开long long一样过不去(这个数据范围咋可能是爆int,我病急乱投医了属于是


by AMIRIOX無暝 @ 2021-10-31 16:27:59

过了。

题面有问题,讨论区


|