• Binary String To Subsequences solution


    题意

    给定一个01s,完全分割成若干子序列,其中的子序列不包含两个相邻的01(eg:"0101","1010")。s按这样的分割方式,最少能分出多少串子序列?同时,还要求输出s串中每一字符所在的分割出的子序列编号

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    int main(){
        int q; 
        scanf("%d", &q);
        while(q--){
            vector<int> ans;
            vector<int> k1, k0;
            int n; 
            scanf("%d", &n);
            string str; 
            cin >> str;
            for (int i = 0; i < n; i++){
                int nk = k0.size() + k1.size();
                if(str[i] == '0'){
                    if(k1.empty()){ 
                        k0.push_back(nk);
                    } 
                    else{ 
                        nk = k1.back(); 
                        k0.push_back(nk); 
                        k1.pop_back(); 
                    }
                }
                else {
                    if(k0.empty()){ 
                        k1.push_back(nk);
                    }
                    else{ 
                        nk = k0.back();
                        k1.push_back(nk);
                        k0.pop_back();
                    }
                }
                ans.push_back(nk);
            }
            printf("%d
    ", (int)(k1.size() + k0.size()));
            for (int i = 0; i < n; i++){
                printf("%d%c", ans[i] + 1, (i == n - 1) ? '
    ' : ' ');
            }
        }
    }
  • 相关阅读:
    第16课 更新和删除数据
    第15课 插入数据
    第14课 组合查询
    第13课 创建高级联结
    第12课 联结表
    第11课 使用子查询
    第10课 分组数据
    第9课 汇总数据
    Python办公自动化 | EXCEL读取和写入
    test
  • 原文地址:https://www.cnblogs.com/hrlsm/p/13463801.html
Copyright © 2020-2023  润新知