说实话我也不知道发生了啥,一开始提交不是TLE就是WA(开了O3之后),但是刷新一下网页之后就AC了,就很迷惑
递归解法
将每一次递归都视作五个区域,直到最终边长为1为止
//#pragma GCC optimize 3 // 开O3的,忽略吧,不知道是什么鬼情况
#include <iostream>
#include <algorithm>
using namespace std;
int pow(int a, int b)
{
int res = 1;
while(b)
{
if (b & 1) res = res * a;
a = a * a;
b >>= 1;
}
return res;
}
const int N = 730;
int n;
char res[N][N];
int dx[] = {0, 2, 0, 1, 2};
int dy[] = {0, 0, 2, 1, 2};
void pt(int n, int x, int y)
{
if (n == 1)
{
res[x][y] = 1;
}
else
{
int len = pow(3, n - 2);
for (int i = 0; i < 5; ++i)
{
pt(n - 1, x + dx[i] * len, y + dy[i] * len);
}
}
}
int main () {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
while(cin >> n && n != -1)
{
fill(res[0], res[0] + N * N, 0);
pt(n, 0, 0);
int len = pow(3, n - 1);
for (int i = 0; i < len; ++i)
{
for (int j = 0; j < len; ++j)
{
if (res[i][j]) cout << 'X';
else cout << ' ';
}
cout << "\n";
}
cout << "-\n";
}
}