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;
}