86分WA#4求助
查看原帖
86分WA#4求助
520359
acb437楼主2023/3/26 11:58

如题,代码如下

#include <cstdio>
#include <iostream>
using namespace std;
int k, l, px, py;
void print(int x, int y, int c, int l)
{
	if(l == 2)
	{
		printf("%d %d %d\n", x, y, c);
		return;
	}
	int L = l / 2;
	if(c == 1)
	{
        print(x, y, 1, L);
		print(x - l / 4, y - l / 4, 1, L);
		print(x - l + 1, y, 3, L);
		print(x, y - l + 1, 2, L);
	}
	else if(c == 2)
	{
        print(x, y, 2, L);
		print(x - l / 4, y + l / 4, 2, L);
		print(x - l + 1, y, 4, L);
		print(x, y + l - 1, 1, L);
	}
    else if(c == 3)
    {
        print(x, y, 3, L);
        print(x + l / 4, y - l / 4, 3, L);
        print(x, y - l + 1, 4, L);
        print(x + l - 1, y, 1, L);
    }
    else if(c == 4)
    {
        print(x, y, 4, L);
        print(x + l / 4, y + l / 4, 4, L);
        print(x, y + l - 1, 3, L);
        print(x + l - 1, y, 2, L);
    }
}
void DFS(int x, int y,  int c, int l)
{
	print(x, y, c, l);
    if(l == 2)return;
    int nx, ny, nk, nl = l / 2;
    nk = nl * 3 / 2;
    if(c == 1)
    {
        nx = x - nk;
        ny = y - nk;
        if(px <= ny && py <= ny)DFS(x - nl, y - nl, 1, nl);
        else if(px <= nx && py > ny)DFS(x - nl, y - l + 1, 2, nl);
        else if(px > nx && py <= ny)DFS(x - l + 1, y - nl, 3, nl);
        else if(px > nx && py > ny)DFS(x - l + 1, y - l + 1, 4, nl);
    }
    else if(c == 2)
    {
        nx = x - nk;
        ny = y + nk - 1;
        if(px <= nx && py <= ny)DFS(x - nl, y + l - 1, 1, nl);
        else if(px <= nx && py > ny)DFS(x - nl, y + nl, 2, nl);
        else if(px > nx && py <= ny)DFS(x - l + 1, y + l - 1, 3, nl);
        else if(px > nx && py > ny)DFS(x - l + 1, y + nl, 4, nl);
    }
    else if(c == 3)
    {
        nx = x + nk - 1;
        ny = y - nk;
        if(px <= nx && py <= ny)DFS(x + l - 1, y - nl, 1, nl);
        else if(px <= nx && py > ny)DFS(x + l - 1, y - l + 1, 2, nl);
        else if(px > nx && py <= ny)DFS(x + nl, y - nl, 3, nl);
        else if(px > nx && py > ny)DFS(x + nl, y - l + 1, 4, nl);
    }
    else if(c == 4)
    {
        nx = x + nk - 1;
        ny = y + nk - 1;
        if(px <= nx && py <= ny)DFS(x + l - 1, y + l - 1, 1, nl);
        else if(px <= nx && py > ny)DFS(x + l - 1, y + nl, 2, nl);
        else if(px > nx && py <= ny)DFS(x + nl, y + l - 1, 3, nl);
        else if(px > nx && py > ny)DFS(x + nl, y + nl, 4, nl);
    }
}
int main()
{
	scanf("%d%d%d", &k, &px, &py);
	k = 1 << (k - 1);
	l = k * 2;
	if(px <= k && py <= k)DFS(l, l, 1, l);
	else if(px <= k && py > k)DFS(l, 1, 2, l);
	else if(px > k && py <= k)DFS(1, l, 3, l);
	else if(px > k && py > k)DFS(1, 1, 4, l);
}

求好心人指点

2023/3/26 11:58
加载中...