TB椰程 TypeBuddy 打字搭子

压缩技术(续集版)

洛谷·深入浅出 · 代码 · cpp · 难度 3/5 · 共 933 字

读入 N×N 01 矩阵,输出压缩码

  • 洛谷
  • 练习

正文

// 原题:https://oj.yecheng.tv/p/1412
// 题意(解压):输入压缩码——第一个数是 N,其后按 0/1 交替给出连续段长度;还原并输出 N×N 的 0/1 点阵。
// 思路:读出 N 与各段长,从 0 起交替填 0/1 直到 N^2 个格子,按行输出。
// 复杂度:O(N^2)。
// 易错点:首段是 0;段与段之间 0/1 交替;按 N 列换行输出,点阵内不留空格。
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main(){
    string line;
    getline(cin, line);
    istringstream iss(line);
    vector<int> nums;
    int x;
    while(iss >> x) nums.push_back(x);
    int N = nums[0];
    char cur = '0';
    int idx = 1;
    vector<char> cells;
    while(idx < nums.size()){
        int len = nums[idx++];
        for(int i = 0; i < len; i++) cells.push_back(cur);
        cur = (cur == '0' ? '1' : '0');
    }
    while((int)cells.size() < N * N){ cells.push_back(cur); cur = (cur == '0' ? '1' : '0'); }
    for(int r = 0; r < N; r++){
        for(int c = 0; c < N; c++) cout << cells[r * N + c];
        cout << endl;
    }
    return 0;
}

洛谷·深入浅出的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK