14分、点2AC求助

P1228 地毯填补问题

toolong114514 @ 2023-04-25 21:23:34

#include<iostream>
using namespace std;
int pow_2[20]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096};
bool vst[1145][1145];
int k,x,y;
void f(int xx,int yy,int dir,int nk){
    if(vst[xx][yy]==true) return;
    if(nk<1) return;
    int np=pow_2[nk-1];
    if(dir==1){//目标在左上角 
        int tx=xx+np,ty=yy+np;
        if(vst[tx][ty]==true) return;
        else vst[tx][ty]=true;
        cout<<tx<<" "<<ty<<" "<<dir<<" "<<endl;
        f(xx,yy,1,nk-1);//左上格 
        f(xx+np,yy,2,nk-1);//左下格 
        f(xx+np,yy+np,1,nk-1);//右下格 
        f(xx+np-1,yy+np,3,nk-1);//右上格 
    } 
    else if(dir==2){//目标在右上角 
        int tx=xx+np,ty=yy+np-1;
        if(vst[tx][ty]==true) return;
        else vst[tx][ty]=true;
        cout<<tx<<" "<<ty<<" "<<dir<<endl;
        f(xx,yy,4,nk-1);//左上格
        f(xx+np,yy,2,nk-1);//左下格 
        f(xx+np,yy+np,1,nk-1); //右下格 
        f(xx+np-1,yy+np,3,nk-1);//右上格 
    }
    else if(dir==3){//目标在左下角 
        int tx=xx+np-1,ty=yy+np;
        if(vst[tx][ty]==true) return;
        else vst[tx][ty]=true;
        cout<<tx<<" "<<ty<<" "<<dir<<endl;
        f(xx,yy,4,nk-1);//左上格
        f(xx+np,yy,3,nk-1);//左下格 
        f(xx+np,yy+np,2,nk-1); //右下格 
        f(xx+np-1,yy+np,3,nk-1);//右上格 
    }
    else {//目标在右下角 
        int tx=xx+np-1,ty=yy+np-1;
        if(vst[tx][ty]==true) return;
        else vst[tx][ty]=true;
        cout<<tx<<" "<<ty<<" "<<dir<<endl;
        f(xx,yy,4,nk-1);//左上格
        f(xx+np,yy,2,nk-1);//左下格 
        f(xx+np,yy+np,4,nk-1); //右下格 
        f(xx+np-1,yy+np,3,nk-1);//右上格 
    }
} 
int main(){
    cin>>k;
    cin>>x>>y;
    vst[x][y]=true;
    int tmp1=pow_2[k],tmp2=pow_2[k-1];
    if(x<=tmp2&&y<=tmp2) f(1,1,1,k);//左上角 
    else if(x<=tmp2&&y<=tmp1) f(1,1,2,k);//右上角 
    else if(x<=tmp1&&y<=tmp2) f(1,1,3,k);//左下角 
    else f(1,1,4,k);//右下角 
    return 0;
}

by CityFish @ 2023-04-29 19:10:11

可以看一下我的贴子


by CityFish @ 2023-04-29 19:10:49

希望能帮到你


by lijuncheng_1207 @ 2023-07-17 10:14:20


#include<bits/stdc++.h>
using namespace std;
#define print(x,y,w) printf("%d %d %d\n",t+x-1,l+y-1,w)
const int N=1e3;
int a[N][N],vis[N][N];
void run(int l,int r,int t,int b,int x,int y){
    int w2=(r-l+1)>>1;
    if(w2==1){
        if(x<=w2)
            if(y<=w2)
                print(2,2,1);
            else
                print(2,1,2);

        else
            if(y<=w2)
                print(1,2,3);
            else
                print(1,1,4);
        return ;
    }
    if(x<=w2){
        if(y<=w2){
            print(w2+1,w2+1,1);
            run(l,r-w2,t,b-w2,x,y);
            run(l+w2,r,t,b-w2,w2,1);
            run(l,r-w2,t+w2,b,1,w2);
            run(l+w2,r,t+w2,b,1,1);
        }
        else{
            print(w2+1,w2,2);
            run(l,r-w2,t,b-w2,w2,w2);
            run(l+w2,r,t,b-w2,x,y-w2);
            run(l,r-w2,t+w2,b,1,w2);
            run(l+w2,r,t+w2,b,1,1);
        }
    }
    else{
        if(y<=w2){
            print(w2,w2+1,3);
            run(l,r-w2,t,b-w2,w2,w2);
            run(l+w2,r,t,b-w2,w2,1);
            run(l,r-w2,t+w2,b,x-w2,y);
            run(l+w2,r,t+w2,b,1,1);
        }
        else{
            print(w2,w2,4);
            run(l,r-w2,t,b-w2,w2,w2);
            run(l+w2,r,t,b-w2,w2,1);
            run(l,r-w2,t+w2,b,1,w2);
            run(l+w2,r,t+w2,b,x-w2,y-w2);

        }
    }

    return ;
}
int main(){
    int x,y,k;
    cin>>k>>x>>y;
    run(1,1<<k,1,1<<k,x,y);
    return 0;
}

|