向之所欣 @ 2021-01-26 12:41:56
#include<cstring>
#include<iostream>
#include<stdio.h>
using namespace std;
/*
地毯型号 对应x y偏移地址 形状
1 ->(1,1) ┘
2 ->(1,0) └
3 ->(0,1) ┐
4 ->(0,0) ┌
坐标系:
╔══════>y
║
║
∨
x
*/
void Solve(int nowsize,int px,int py,int x=0,int y=0)/*当前大小,公主位置,基址*/ //保证px<=nowsize&&py<=nowsize
{
if(nowsize==1)//1*1
return;
else
{
int newsize=nowsize>>1;//折半
if(px<=newsize&&py<=newsize)//公主在左上
{
printf("%d %d %d\n",newsize+x+1,newsize+y+1,1);//地毯1
Solve(newsize,px,py,x,y);//对左上递归,公主在左上 px<=newsize;py<=newsize
Solve(newsize,newsize,1,x,newsize+y);//对右上递归,端点视为公主
Solve(newsize,1,newsize,newsize+x,y);//对左下递归,端点视为公主
Solve(newsize,1,1,newsize+x,newsize+y);//对右下递归,端点视为公主
}
else if((px<=newsize)&&!(py<=newsize))//公主在右上
{
printf("%d %d %d\n",newsize+x+1,newsize+y,2);//地毯2
Solve(newsize,newsize,newsize,x,y);//对左上递归
Solve(newsize,px,py-newsize,x,newsize+y);//对右上递归 px<=newsize;py-newsize<=newsize
Solve(newsize,1,newsize,newsize+x,y);//对左下递归
Solve(newsize,1,1,newsize+x,newsize+y);//对右下递归
}
else if(!(px<=newsize)&&(py<=newsize))//公主在左下
{
printf("%d %d %d\n",newsize+x,newsize+y+1,3);//地毯3
Solve(newsize,newsize,newsize,x,y);//对左上递归
Solve(newsize,newsize,1,x,newsize+y);//对右上递归
Solve(newsize,px-newsize,py,newsize+x,y);//对左下递归 px-newsize<=newsize;py<=newsize
Solve(newsize,1,1,newsize+x,newsize+y);//对右下递归
}
else if(!(px<=newsize)&&!(py<=newsize))//公主在右下
{
printf("%d %d %d\n",newsize+x,newsize+y,4);//地毯4
Solve(newsize,newsize,newsize,x,y);//对左上递归
Solve(newsize,newsize,1,x,newsize+y);//对右上递归
Solve(newsize,1,newsize,newsize+x,y);//对左下递归
Solve(newsize,px-newsize,py-newsize,newsize+x,newsize+y);//对右下递归 px-newsize<=newsize;py-newsize<=newsize
}
}
}
int main()
{
int k;
scanf("%d",&k);
int size;//总大小
size=1<<k;
int px,py;
scanf("%d%d",&px,&py);
Solve(size,px,py);
}
by esquigybcu @ 2021-01-26 12:43:18
tlqtj?
by qinyihao @ 2021-01-26 12:43:23
tlqtj sqlm
by Scintilla @ 2021-01-26 12:46:41
tlqtj sqlm
by 囧仙 @ 2021-01-26 13:27:32
tlqtj sqlm
by 银河AI @ 2021-01-26 13:34:36
tlqtj是啥意思
by hmzclimc @ 2021-01-26 14:00:38
tlqtj sqlm
by nalemy @ 2021-02-26 22:29:15
@银河AI ltqtj=讨论区题解 sqlm=删前留名
by ynliao @ 2021-08-11 21:17:29
虽然是讨论区题解,但是和我的思路完全一样,正好帮我纠错了,表示感谢
by henrywyh @ 2022-01-21 13:45:09
tlqtj sqlm