B 球格模型(简单版)

我们容易想到一种构造,可以从 开始往右下角斜着填写。剩下有不够的地方,我们就直接把那一行/列填满即可。

根据以上可以得出,如果 的话,说明是填不了的,直接输出

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

int main(){
    int n, m, k;
    cin >> n >> m >> k;
    vector<vector<int>> a(n + 1, vector<int>(m + 1, 0));
    if (k < max(n, m)) cout << -1 << endl;
    else {
        for (int i = 1; i <= min(n, m); i ++ ) a[i][i] = 1;
        if (n < m) {
            for (int i = n + 1; i <= m; i ++ ) {
                a[1][i] = 1;
            }
        } else {
            for (int i = m + 1; i <= n; i ++ ) {
                a[i][1] = 1;
            }
        }
        int d = k - max(n, m);
        a[1][1] += d;
        for (int i = 1; i <= n; i ++ ){
            for (int j = 1; j <= m; j ++ ) cout << a[i][j] << ' ';
            cout << '\n';
        }
    }
    return 0;
}