求助

P1228 地毯填补问题

cst_123 @ 2022-04-23 20:14:47

14分 ,只过第二个点。

#include<bits/stdc++.h>
using namespace std;
typedef long long lon;
long long read(){
   long long x=0,sg=1;char cha=getchar();
   while(cha<'0'||cha>'9'){if(cha=='-')sg=-1;cha=getchar();}
   while(cha>='0'&&cha<='9'){x=x*10+cha-'0';cha=getchar();}
   return x*sg;
}
lon n,XXX,YYY;
void cst_Dfs(long long N,long long Zx,long long Zy,long long xx,long long yy){
    if(N==0)
        return;
    int to=(1<<N-1);
    if(xx<Zx+to&&yy<Zy+to){
        //左上角
        printf("%lld %lld %lld\n",Zx+to,Zy+to,1);
        cst_Dfs(N-1,Zx,Zy,xx,yy);
        cst_Dfs(N-1,Zx,Zy+to,Zx+to-1,Zy+to);
        cst_Dfs(N-1,Zx+to,Zy,Zx+to,Zy+to-1);
        cst_Dfs(N-1,Zx+to,Zy+to,Zx+to,Zy+to);
    }
    else if(xx<Zx+to){
        //右上角
        printf("%lld %lld %lld\n",Zx+to,Zy+to-1,2);
        cst_Dfs(N-1,Zx,Zy,Zx+to-1,Zy+to-1);
        cst_Dfs(N-1,Zx,Zy+to,xx,yy);
        cst_Dfs(N-1,Zx+to,Zy,Zx+to,Zy+to-1);
        cst_Dfs(N-1,Zx+to,Zy+to,Zx+to,Zy+to);
    }
    else if(yy<Zx+to){
        //左下角 
        printf("%lld %lld %lld\n",Zx+to-1,Zy+to,3);
        cst_Dfs(N-1,Zx,Zy,Zx+to-1,Zy+to-1);
        cst_Dfs(N-1,Zx,Zy+to,Zx+to-1,Zy+to);
        cst_Dfs(N-1,Zx+to,Zy,xx,yy);
        cst_Dfs(N-1,Zx+to,Zy+to,Zx+to,Zy+to);
    }
    else{
        //右下角
        printf("%lld %lld %lld\n",Zx+to-1,Zy+to-1,4);
        cst_Dfs(N-1,Zx,Zy,Zx+to-1,Zy+to-1);
        cst_Dfs(N-1,Zx,Zy+to,Zx+to-1,Zy+to);
        cst_Dfs(N-1,Zx+to,Zy,Zx+to,Zy+to-1);
        cst_Dfs(N-1,Zx+to,Zy+to,xx,yy);
    }
}
int main(){
    n=read();
    XXX=read();
    YYY=read();
    cst_Dfs(n,1,1,XXX,YYY);
    return 0;
}

by lihanwen12 @ 2022-04-23 20:48:23

31 行:

if(yy<Zx+to){

|