这题有毒

P1228 地毯填补问题

Binah @ 2019-09-17 19:29:55

rt,代码是每一步分为四块,通过分治输出2^k次方的L型,直到只剩一块,逻辑是正确的,但是有两个点莫名WA掉,估计和标答算法不一样所以挂了,所以后人千万不要闲的没事和这题的两三个点计较,没用的

#include <bits/stdc++.h>
#define scnaf scanf
using namespace std;
int po[11]={1,2,4,8,16,32,64,128,256,512,1024};
int n;
int t=0;
int x1,yy;
void prt(int p,int d,int x,int y)
{
    if(p==1)
    {
        t++;
        if(d==1)
        {
            printf("%d %d %d\n",y+1,x+1,d);
        }
        if(d==2)
        {
            printf("%d %d %d\n",y+1,x,d);
        }
        if(d==3)
        {
            printf("%d %d %d\n",y,x+1,d);
        }
        if(d==4)
        {
            printf("%d %d %d\n",y,x,d);
        }
        return;
    }
    if(d==1)
    {
        prt(p-1,1,x+po[p-2],y+po[p-2]);
        prt(p-1,1,x+po[p-1],y+po[p-1]);
        prt(p-1,2,x,y+po[p-1]);
        prt(p-1,3,x+po[p-1],y);
    }
    if(d==2)
    {
        prt(p-1,2,x+po[p-2],y+po[p-2]);
        prt(p-1,2,x,y+po[p-1]);
        prt(p-1,4,x,y);
        prt(p-1,1,x+po[p-1],y+po[p-1]);
    }
    if(d==3)
    {
        prt(p-1,3,x+po[p-2],y+po[p-2]);
        prt(p-1,3,x+po[p-1],y);
        prt(p-1,4,x,y);
        prt(p-1,1,x+po[p-1],y+po[p-1]);
    }
    if(d==4)
    {
        prt(p-1,4,x,y);
        prt(p-1,4,x+po[p-2],y+po[p-2]);
        prt(p-1,2,x,y+po[p-1]);
        prt(p-1,3,x+po[p-1],y);
    }
} 
int main()
{
    scanf("%d",&n);
    int curx=0,cury=0;
    int maxx=po[n],maxy=po[n];
    if(n==0)
    {
        return 0;
    }
    scanf("%d%d",&x1,&yy);
    for(int i=n;i>=1;i--)
    {
        if(2*x1<=curx+maxx)
        {
            if(2*yy<=cury+maxy)
            {
                prt(i,1,curx+1,cury+1);
                maxx-=po[i-1];
                maxy-=po[i-1];
            }
            else
            {
                prt(i,2,curx+1,cury+1);
                maxx-=po[i-1];
                cury+=po[i-1];
            }
        }
        else
        {
            if(2*yy<=cury+maxy)
            {
                prt(i,3,curx+1,cury+1);
                curx+=po[i-1];
                maxy-=po[i-1];
            }
            else
            {
                prt(i,4,curx+1,cury+1);
                curx+=po[i-1];
                cury+=po[i-1];
            }
        }
    }
    return 0;
}

by F1aMiR3 @ 2019-09-17 19:37:19

@Flowey 请不要质疑一道686ac的题目(雾)


by guodong @ 2019-09-17 20:25:35

@Flowey 自己不会做怪谁呢


by Diaоsi @ 2019-09-17 20:27:26

@Flowey 是你自己的问题


|