n, m, k = map(int, input().split())

def get_matrix(n, m, k):
    if k < max(n, m):
        return -1

    result = [[0] * m for _ in range(n)]
    used = 0

    # 首先放 min(n, m) 个对角线上的 1
    for i in range(min(n, m)):
        result[i][i] = 1
        used += 1

    # 如果 n > m,需要给多出来的行加小球(列 m-1)
    for i in range(m, n - 1):
        result[i][m - 1] = 1
        used += 1

    # 如果 m > n,需要给多出来的列加小球(行 n-1)
    for j in range(n, m - 1):
        result[n - 1][j] = 1
        used += 1

    # 最后剩下的球放在最后一个格子
    last_i = n - 1
    last_j = m - 1
    result[last_i][last_j] = k - used + result[last_i][last_j]  # 累加

    return result

result = get_matrix(n, m, k)

if result == -1:
    print(-1)
else:
    for row in result:
        print(' '.join(map(str, row)))

  • 时间复杂度:O(n + m),仅访问部分位置
  • 空间复杂度:O(n * m)(若强制输出完整矩阵,无法避免)若允许稀疏表示,空间也可降至 O(n + m)