// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432 // 图片见底部,图中圈圈表示放一个,叉叉是剩下的 #include <iostream> #include <vector> using namespace std; /*bb_makevec*/template <typename T> T bb_makevec(T bbv_value) { return bbv_value;}template<typename T1, typename T2, typename ...Args> auto bb_makevec(T1 n, T2 m, Args... arg) { using newtype = decltype(bb_makevec(m, arg...)); return vector<newtype>(n, bb_makevec(m, arg...));} /*read*/template<typename T> void read(T& bbv_value) { bbv_value = 0; char bbv_c; bbv_c = getchar(); while (bbv_c > '9' || bbv_c < '0') { bbv_c = getchar(); } while (bbv_c <= '9' && bbv_c >= '0') { bbv_value = (bbv_value << 3) + (bbv_value << 1) + (bbv_c & 15); bbv_c = getchar(); }} #define rd read #define pre(i, j, k) for (int i = j; i < k; i++) int main() { int n, m; rd(n), rd(m);//--------快读 auto a = bb_makevec(n, m, 0);//-----创建n * m 的初始元素为0的向量(vector) int k; rd(k); int mmin = min(n, m); pre(i, 0, mmin) {//--------对角线放置 a[i][i] = 1; k--; if (k < 0) {//---------判断是否足够,注意不是<=而是<,因为当n==m时最后一次可以为零,n!=m时后面另外判断 cout << -1; return 0; } } if (n > m) { pre(i, mmin, n - 1) { a[i][m - 1] = 1; k--; if (k <= 0) { cout << -1; return 0; } } } else { pre(i, mmin, m - 1) { a[n - 1][i] = 1; k--; if (k <= 0) { cout << -1; return 0; } } } if (n != m){ if (k == 0){ cout << -1; return 0; } a[n- 1][m-1] = k; } else{ a[n - 1][m - 1] += k; } pre(i, 0, n){ pre(j, 0, m) cout << a[i][j] << ' '; cout << endl; } } // 64 位输出请用 printf("%lld")