Untitled
Anonymous
c_cpp
02/15/2026 7:32 AM
2.0 KB
47
Indexable
#include <bits/stdc++.h>
using namespace std;
// we enumerate quadrants as
// 0 1
// 2 3
int n, x, y;
vector<vector<int>> grid;
int current;
void color2(int cx, int cy, int e, int quad) {
if (e == 1) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
if (grid[i + cx][j + cy] == 0)
grid[i + cx][j + cy] = current;
current++;
return;
}
int half = (1 << (e - 1));
color2(cx + (half / 2), cy + (half / 2), e - 1, quad);
for (int i = 0; i < 4; i++) if (i != quad) {
int ccx = cx + half * (i / 2), ccy = cy + half * (i % 2);
color2(ccx, ccy, e - 1, 3 - i);
}
}
void color1(int cx, int cy, int e) {
int half = (1 << (e - 1));
int quad = (x >= cx + half) * 2 + (y >= cy + half);
if (e > 1) {
color1(cx + half * (quad / 2), cy + half * (quad % 2), e - 1);
}
color2(cx, cy, e, quad);
}
void solve() {
cin >> n;
grid = vector<vector<int>>(1 << n, vector<int>(1 << n));
cin >> x >> y;
--x, --y;
grid[x][y] = -1;
if (n == 1) {
for (int i = 0; i < (1 << n); i++)
for (int j = 0; j < (1 << n); j++)
cout << grid[i][j] + 1 << " \n"[j == 1];
return;
}
current = 1;
color1(0, 0, n);
for (int i = 0; i < (1 << n); i++) {
for (int j = 0; j < (1 << n); j++)
if (grid[i][j] == -1) cout << 0 << " ";
else cout << grid[i][j] << " ";
cout << "\n";
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int tt = 1, tc = 1;
cin >> tt;
while (tt--) solve(), tc++;
}Editor is loading...
Leave a Comment