Untitled

Anonymous
c_cpp
02/15/2026 7:32 AM
2.0 KB
45
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