题解:P1319 压缩技术

· · 题解

本题大意

要求根据给定的一组压缩数据还原一个 n×n01 矩阵。压缩数据的格式是交替给出连续 01 的个数,第一个数字表示连续 0 的个数,第二个数字表示连续 1 的个数,以此类推。

思路

首先读取矩阵的边长 n。使用一个循环不断读取压缩数据中的数字 a ,使用 id 变量来标记当前应该输出 0 还是 10 表示输出 01 表示输出 1)。对于每个数字 a,连续输出 a01,在输出过程中,每输出 n 个字符就换行。并使用 s 变量记录已输出的总字符数,当 s 达到 x^2 时停止。

本题代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,a;
int endll,id=0,s;
signed main(){
    cin>>n;
    while(s<n*n){
        cin>>a;
        if(id==0){
            for(int i=1;i<=a;i++){
                if(endll==n){
                    cout<<endl;
                    endll=0;
                }
                cout<<"0";
                endll++;
                s++;
            }
        }else{
            for(int i=1;i<=a;i++){
                if(endll==n){
                    cout<<endl;
                    endll=0;
                }
                cout<<"1";
                endll++;
                s++;
            }   
        }
        id++;
        id%=2;
    }

    return 0;
}