56分,完全不理解为什么TLE,求各位大佬帮助,谢谢各位

P1228 地毯填补问题

拱垲 @ 2023-11-27 22:42:39

这道题我写完代码后和题解作对比发现一开始的想法似乎就是对的,但偏偏我的代码就是TLE了,不知道为什么,各种小的优化也都没缺呀,求各位大佬帮助 dfsg是解决左上角ax,ay右下角bx,by的方阵,dfsf是解决拐角形的阵,补全后为左上角ax,ay右下角bx,by的方阵。大体思路是把一个dfsg拆成一个更小的dfsg和dfsf

#include <iostream>
using namespace std;
#define mx ((ax+bx-1)>>1)
#define my ((ay+by-1)>>1)
int x,y,k;
void dfsf(int ax,int ay,int bx,int by,int status)
{
    if(bx<=ax)
        return;
    if(bx-ax==1)
    {
        switch(status)
        {
            case 1:printf("%d %d %d\n",bx,by,status);break;
            case 2:printf("%d %d %d\n",bx,ay,status);break;
            case 3:printf("%d %d %d\n",ax,by,status);break;
            case 4:printf("%d %d %d\n",ax,ay,status);break;
        }
        return;
    }
    dfsf(((ax+mx-1)>>1)+1,((ay+my-1)>>1)+1,(mx+bx)>>1,(my+by)>>1,status);
    if(status!=1)dfsf(ax,ay,mx,my,4);
    if(status!=2)dfsf(ax,my+1,mx,by,3);
    if(status!=3)dfsf(mx+1,ay,bx,my,2);
    if(status!=4)dfsf(mx+1,my+1,bx,by,1);
    return;
}
void dfsg(int ax,int ay,int bx,int by)
{
    if(ax>=bx&&bx>=by)return;
    if(x>mx&&y>my)
    {
        dfsf(ax,ay,bx,by,4);
        dfsg(mx+1,my+1,bx,by);
        return;
    }
    else if(x>mx&&y<=my)
    {
        dfsf(ax,ay,bx,by,2);
        dfsg(ax,my+1,mx,by);
        return;
    }
    else if(x<=mx&&y>my)
    {
        dfsf(ax,ay,bx,by,3);
        dfsg(ax,my+1,mx,by);
        return;
    }
    else
    {
        dfsf(ax,ay,bx,by,1);
        dfsg(ax,ay,mx,my);
        return;
    }
}
int main()
{
    scanf("%d%d%d",&k,&x,&y);
    dfsg(1,1,1<<k,1<<k);
    return 0;
}

|