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 是你自己的问题