题解 P1319 【压缩技术】

· · 题解

看到 @林霂泫 的代码,感觉有些地方仍然有些冗余,我们为什么不用更优美、更简单的方式来完成它呢?

思路如下:IO同步,进一个数出一串字符。

同 @林霂泫 ,只用四个变量,但是中间的输出、条件判断也可以大幅省略。

每次的精简及抖机灵在代码注释中给出。

···cpp

#include <cstdio>
int N,p,q,t; // 定义四个变量,N如题所示,p记录正在处理的压缩码,q表示本行已输出的字符数量,t 表示输出的内容(0或1)
int main()
{
    for(scanf("%d",&N); ~scanf("%d",&p);t^=1)
// 上句共三个功能,分别是循环开始时读入 N ;不断读入 P 以及 每次循环后 t 交换 01 状态
    {
        for(; p--; q++) // 先执行一次 p-- , 此后每次顺序执行 q++ , p-- ,直到 (p--) == 0 时结束本层循环
        {
            if(q==N)q=0&putchar(10); // 如果输出达到 N 个,q置零并且输出换行符
            putchar(38+t); // 输出字符 0 或 1
        }
    }
}