CDX0721 @ 2024-10-24 23:45:45
#include <iostream>
#include <cmath>
using namespace std;
int k,x,y;
int pow2[11]={0};
int xp=0,yp=0;
void put(int x,int y,int n,int type)
{
if (n==1)
{
printf("%d %d %d\n",x,y,type);
}
else
{
put(x,y,n-1,type);
switch (type)
{
case 1:
{
put(x-pow2[n-2],y-pow2[n-2],n-1,1);
put(x,y+1-pow2[n],n-1,2);
put(x+1-pow2[n],y,n-1,3);
}break;
case 2:
{
put(x-pow2[n-2],y+pow2[n-2],n-1,2);
put(x+1-pow2[n],y,n-1,4);
put(x,y-1+pow2[n],n-1,1);
}break;
case 3:
{
put(x+pow2[n-2],y-pow2[n-2],n-1,3);
put(x-1+pow2[n],y,n-1,1);
put(x,y-pow2[n]+1,n-1,4);
}break;
case 4:
{
put(x+pow2[n-2],y+pow2[n-2],n-1,4);
put(x-1+pow2[n],y,n-1,2);
put(x,y-1+pow2[n],n-1,3);
}break;
}
}
}
int sch(int n)//use no.sch() carpet
{
n--;
if (x<=pow2[n])
{
if (y<=pow2[n])
return 1;
else
return 2;
}
else
{
if (y<=pow2[n])
return 3;
else
return 4;
}
}
int main(void)
{
cin>>k>>x>>y;
for (int i=0;i<11;i++)
{
pow2[i]=pow(2,i);
}
while (k!=1)
{
switch (sch(k))
{
case 1:put(pow2[k]+xp,pow2[k]+yp,k,1);
break;
case 2:put(pow2[k]+xp,1+yp,k,2);
yp+=pow2[k-1];
break;
case 3:put(1+xp,pow2[k]+yp,k,3);
xp+=pow2[k-1];
break;
case 4:put(1+xp,1+yp,k,4);
xp+=pow2[k-1];
yp+=pow2[k-1];
break;
}
x%=pow2[k-1];
y%=pow2[k-1];
k--;
}
return 0;
}
样例跑的没问题,但是提交上一串WA4,求修改