1 条题解

  • 0
    @ 2082-12-15 0:30:41

    【深基5.习10】压缩技术(续集版)

    解题思路

    由第一行长度确定 N,把 N 行按顺序连接。初始当前位为 0,连续相同则计数,遇到不同位先输出段长再切换;最后输出末段。

    正确性说明

    每次字符变化都是一个极大连续段的边界,逐段记录长度正是压缩规则;第一位为 1 时会先输出 0 长的零段。

    易错点

    不要在每行边界重置计数;末段必须输出;开头先输出 N。

    复杂度

    时间 O(N²),空间 O(N²)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        string line, s;
        cin >> line;
        int n = line.size();
        s = line;
        for (int i = 1; i < n; i++) {
            cin >> line;
            s += line;
        }
        cout << n;
        char bit = '0';
        int count = 0;
        for (char c : s) {
            if (c == bit)
                count++;
            else {
                cout << " " << count;
                bit = c;
                count = 1;
            }
        }
        cout << " " << count << "\n";
        return 0;
    }
    
    • 1

    【深基5.习10】压缩技术(续集版)

    信息