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

Code

#include <iostream>
#include <vector>
using namespace std;
using vi = vector<int>;
using vvi = vector<vi>;

vvi flip(const vvi& M) {
    if (M.empty()) return M;
    int R = M.size(), C = M[0].size();
    vvi ret(C, vi(R));
    for (int i=0; i<R; i++) {
        for (int j=0; j<C; j++) {
            ret[j][i] = M[i][j];
        }
    }
    return ret;
}

vvi solve(int R, int C) {
    if (R>C  && C<=3) return flip(solve(C, R));
    if (R==1 && C==1) return {{1}};
    if (R<=2 && C<=2) return {};
    if (R==1 && C==3) return {};
    if (R==2 && C==3) return {{1,5,3}, {4,2,6}};
    if (R==3 && C==3) return {{1,8,3}, {4,2,6}, {7,5,9}};
    vvi ans(R, vi(C));
    int x=1;
    for (int c0 : C==3 ? vi{0,1} : vi{1,0}) {
        for (int r=0; r<R; r++) {
            for (int c=c0; c<C; c+=2) {
                ans[r][c] = x++;
            }
        }
    }
    return ans;
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int t; cin>>t;
    for (int R,C; cin>>R>>C;) {
        auto ans = solve(R,C);
        if (ans.empty()) {
            cout << "NO\n";
        }
        else {
            cout << "YES\n";
            for (int i=0; i<R; i++) {
                for (int j=0; j<C; j++) {
                    cout << ans[i][j] << "\n "[j+1<C];
                }
            }
        }
    }
}

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