1 条题解
-
0
【深基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