Submission details
Task:Ruudukko
Sender:ArktinenKarpalo
Submission time:2025-09-27 12:05:36 +0300
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttime
#1ACCEPTED0.00 sdetails

Code

#include <bits/stdc++.h>

typedef long long ll;

using namespace std;

bool oob(int x, int y, int n, int m) {
  if (x <= 0 || y <= 0 || x > n || y > m)
    return true;
  return false;
}

int t[111][11];

int qq = 0;
bool brut(int x, int y, int n, int m, bitset<101> &bs) {
  for (int j = 1; j <= n * m; j++) {
    if (bs[j])
      continue;
    if ((oob(x + 1, y, n, m) || t[x + 1][y] == 0 ||
         abs(t[x + 1][y] - j) != 1) &&
        (oob(x - 1, y, n, m) || t[x - 1][y] == 0 ||
         abs(t[x - 1][y] - j) != 1) &&
        (oob(x, y + 1, n, m) || t[x][y + 1] == 0 ||
         abs(t[x][y + 1] - j) != 1) &&
        (oob(x, y - 1, n, m) || t[x][y - 1] == 0 ||
         abs(t[x][y - 1] - j) != 1)) {
      bs[j] = 1;
      t[x][y] = j;
      if (x == n && y == m) {
        return true;
      }
      if (x == n) {
        if (brut(1, y + 1, n, m, bs))
          return true;
      } else {
        if (brut(x + 1, y, n, m, bs))
          return true;
      }
      t[x][y] = 0;
      bs[j] = 0;
    }
  }
  return false;
}

void solve(int n, int m) {
  qq = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      t[i][j] = 0;
  bitset<101> bs;
  if (!brut(1, 1, n, m, bs)) {
    cout << "NO\n";
  } else {
    cout << "YES\n";
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        cout << t[i][j] << " ";
      }
      cout << "\n";
    }
  }
}

int main() {
  int t;
  cin >> t;
  while (t--) {
    int n, m;
    cin >> n >> m;
    solve(n, m);
  }
}

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
...