Submission details
Task:Ruudukko
Sender:Yytsi
Submission time:2025-09-26 18:28:13 +0300
Language:C++ (C++20)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttime
#1ACCEPTED0.00 sdetails

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#ifdef LOCAL
#include "debug.hpp"
#else
#define debug(...) 0xffff
#endif

int g[12][12];
int N, M;

bool ir(int y, int x) {
  return 0 <= y && y < N && 0 <= x && x < M;
}

bool nz(int y, int x) {
  return g[y][x] != 0;
}

bool ok() {
  for (int y = 0; y < N; y++) {
    for (int x = 0; x < M; x++) {
      for (int dy = -1; dy <= 1; dy++) {
        for (int dx = -1; dx <= 1; dx++) {
          if (abs(dy) + abs(dx) != 1) continue;
          int ty = y + dy;
          int tx = x + dx;
          if (ir(ty, tx) && nz(ty, tx) && abs(g[y][x] - g[ty][tx]) == 1) {
            return false;
          }
        }
      }
    }
  }
  return true;
}



bool brute(int y, int x, int fr) {
  if (fr == N * M) {
    return ok();
  }

  for (int dy = -1; dy <= 1; dy++) {
    for (int dx = -1; dx <= 1; dx++) {
      if (abs(dy) + abs(dx) != 1) continue;
      int ty = y + dy;
      int tx = x + dx;
      if (ir(ty, tx) && nz(ty, tx) && abs(g[y][x] - g[ty][tx]) == 1) {
        return false;
      }
    }
  }

  for (int ny = 0; ny < N; ny++) {
    for (int nx = 0; nx < M; nx++) {
      if (!nz(ny, nx)) {
        g[ny][nx] = fr + 1;
        if (brute(ny, nx, fr + 1)) return true;
        g[ny][nx] = 0;
      }
    }
  }

  return false;
}

void printSol() {
  cout << "YES\n";
  for (int y = 0; y < N; y++) {
    for (int x = 0; x < M; x++) {
      cout << g[y][x] << " ";
    }
    cout << "\n";
  }
}

void solve() {
  int n, m;
  cin>>n>>m;
  N = n;
  M = m;

  for (int y = 0; y < n; y++) {
    for (int x = 0; x < m; x++) {
      g[y][x] = 0;
    }
  }

  for (int y = 0; y < n; y++) {
    for (int x = 0; x < m; x++) {
      g[y][x] = 1;
      bool works = brute(y, x, 1);
      if (works) {
        printSol();
        return;
      }
      g[y][x] = 0;
    }
  }

  cout << "NO\n";
}

int main() {
  ios_base::sync_with_stdio(0); cin.tie(0);
  int t; cin >> t;
  while (t--) {
    solve();
  }
}

Test details

Test 1

Verdict: ACCEPTED

input
100
1 1
1 2
2 1
1 3
...

correct output
YES
1
NO
NO
NO
...

user output
YES

NO
NO
NO
...