1 条题解

  • 0
    @ 2026-10-27 12:58:41

    思路与算法

    按从上到下、从左到右的顺序读取矩阵;读到非零值立即输出其1-based行号、列号和数值。无需存储整个矩阵。

    正确性说明

    读取顺序已经是要求的行列顺序;每个单元恰访问一次,零值不输出,非零值恰输出一个三元组。因此三元组集合既不遗漏也不重复,按这些坐标还原即可恢复原矩阵。

    复杂度

    读取nm个元素,时间O(nm);初始化O(1),额外空间O(1),不计输出缓冲。

    易错点

    不要在首行额外输出非零数目。行列从1开始。全零矩阵输出空内容,不能输出0。输入允许0,所谓正整数限定的是非零元素。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n, m;
        cin >> n >> m;
        for (int i = 1; i <= n; ++i)
            for (int j = 1; j <= m; ++j) {
                int x;
                cin >> x;
                if (x)
                    cout << i << ' ' << j << ' ' << x << "\n";
            }
    }
    
    • 1

    信息

    ID
    2061
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者