首页 > Windows开发 > 详细

AcWing3544. 寻找变化前的01序列

时间:2021-06-12 12:32:33      阅读:38      评论:0      收藏:0      [点我收藏+]

题目描述

给你一个 01 序列,HDLC 协议处理的话,如果出现连续的 5 个 1 会补 1 个 0。

例如 1111110,会变成 11111010。

现在给你一个经过 HDLC 处理后的 01 序列,你需要找到 HDLC 处理之前的 01 序列。

例如给你 11111010,你需要输出 1111110。

输入格式

第一行一个整数 N,表示共有 N 组测试数据。

每组数据占一行,包含一个 01 序列。

输出格式

每组数据输出一行结果,为处理之前的 01 序列。

数据范围

\(1≤N≤100\),
01 序列长度不超过 100

输入样例:

2
11111010
1111100

输出样例:

1111110
111110

题解

枚举即可、时间复杂度\(O(n)\)、每次判断当前字符出现个数、若出现次数不到5、即直接打印输出、到了五次即对接下来的cnt统计和输出做特判。


代码

#include <bits/stdc++.h>

using namespace std;

string str;

int main(){
    int T;
    scanf("%d",&T);
    
    while(T--){
        int cnt = 0;
        cin >> str;
        string res = "";
        int n = str.length();
        
        for(int i = 0;i < n;++i){
            if(str[i] == ‘1‘){
                res += "1";
                cnt++;
            }else{
                res += "0";
                cnt = 0;
            }
            if(cnt == 5){
                cnt = 0;
                i++;    // 跳过这次输出、并将cnt归零 
            }
        }
        cout << res << endl;
    }
    return 0;
}

AcWing3544. 寻找变化前的01序列

原文:https://www.cnblogs.com/xiaofrank/p/14877867.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!