救救孩子吧,找了半晚上了,全wa,过不了样例

P1228 地毯填补问题

detor @ 2022-07-19 20:07:56

#include<bits/stdc++.h>
using namespace std;
int n,x,y,a[1030][1030],t;
void f(int p,int k1,int k2,int x,int y){
    int m=p/2;
    int xx=k1;
    int yy=k2;
    int xt=m+xx;
    int yt=m+yy;
    a[xt-1][yt-1]=1;
    a[xt][yt-1]=1;
    a[xt-1][yt]=1;
    a[xt][yt]=1;
    if(p>=2){
    if(x<=xt&&y<=yt){
        cout<<xt<<' '<<yt<<' '<<1<<endl;
        if(xt-1!=x&&yt-1!=y)a[xt-1][yt-1]=0;
        f(m,xx,yy,x,y);
        f(m,xx,yt,xt-1,yt);
        f(m,xt,yy,xt,yt-1);
        f(m,xt,yt,xt,yt);
    }
    if(x>xt&&y<=yt){
        cout<<xt<<' '<<yt-1<<' '<<2<<endl;
        if(xt-1!=x&&yt!=y)a[xt-1][yt]=0;
        f(m,xx,yy,xt-1,yt-1);
        f(m,xx,yt,x,y);
        f(m,xt,yy,xt,yt-1);
        f(m,xt,yt,xt,yt);
    }
    if(x<=xt&&y>yt){
        cout<<xt-1<<' '<<yt<<' '<<3<<endl;
        if(xt!=x&&yt-1!=y)a[xt][yt-1]=0;
        f(m,xx,yy,xt-1,yt-1);
        f(m,xx,yt,xt-1,yt);
        f(m,xt,yy,x,y);
        f(m,xt,yt,xt,yt);
    }
    if(x>xt&&y>yt){
        cout<<xt-1<<' '<<yt-1<<' '<<4<<endl;
        if(xt!=x&&yt!=y)a[xt][yt]=0;
        f(m,xx,yy,xt-1,yt-1);
        f(m,xx,yt,xt-1,yt);
        f(m,xt,yy,xt,yt-1);
        f(m,xt,yt,x,y);
    }
    }else{
//      if(a[xx][yy]==1)cout<<xx+1<<' '<<yy+1<<' '<<3;
//      else if(a[xx+1][yy+1]==1)cout<<xx<<' '<<yy<<' '<<4;
//      else if(a[xx+1][yy]==1)cout<<xx<<' '<<yy+1<<' '<<2;
//      else cout<<xx<<' '<<xx+1<<' '<<yy<<' '<<1;
//      cout<<endl;
//      a[xx][yy]=a[xx+1][yy]=a[xx][yy+1]=a[xx+1][yy+1]=1;
        return;
    }

}
int main(){
    cin>>n>>x>>y;
    a[x][y]=1;
    t=pow(2,n);
    f(t,1,1,x,y);
    //t矩阵规模,1,1是左上角,x,y是铺过的
    return 0;
}

by _cyh0412_ @ 2022-07-19 20:19:54

。。。。。。

建议你别做这一题了,先做别的吧


by detor @ 2022-07-19 20:28:15

@cyh0412 改改好像就行了


by detor @ 2022-07-20 08:36:12

ding


|