【深基5.习10】压缩技术(续集版) · 教师题解
【深基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;
}