• CF949A && LFYZOJ#111 Zebras


    由于每个子串以0开头,以0结束.

    容易得到:0的个数必须比1多.

    我们设置一个统计数量的变量cnt.

    由于不知道子串个数,防止炸空间,用二维的动态数组vector.

    先输入 然后扫一遍,遇到0 cnt++,并且把0的位置压进数组.遇到1 cnt--,并把1的位置压进数组.因为遇到0后再遇到1 cnt的值不会变,所以此时的子串0和1的位置就放到了数组的cnt这同一行上.如果cnt比0小直接输出-1.

    上代码

    #include<bits/stdc++.h>
    using namespace std;
    char s[200005];
    int l,cnt,k;
    vector<int>q[200005];
    int main(){
        scanf("%s",s);
        l=strlen(s);
        for(int i=0;i<l;i++){
            if(s[i]=='0')q[cnt++].push_back(i+1);
            else{
                if(cnt==0){
                    printf("-1");
                    return 0;
                }
                q[--cnt].push_back(i+1);
            }
            k=max(k,cnt);
        }
        if(cnt!=k){
            printf("-1");
            return 0;
        }
        printf("%d
    ",cnt);
        for(int i=0;i<cnt;i++){
            printf("%d",q[i].size());
            for(int j=0;j<q[i].size();j++)
                printf(" %d",q[i][j]);
            printf("
    ");
        }
        return 0;
    }
    
    不如吃茶去
  • 相关阅读:
    Promise关键知识
    CSS实现简易的轮播图
    绝对定位和相对定位的一些特性
    行内元素及其浮动
    webpack实践总结
    less语法详解
    js模拟事件
    jquery各种事件绑定的区别
    前端路由实现的关键知识点
    js鼠标事件相关知识
  • 原文地址:https://www.cnblogs.com/pushinl/p/8942498.html
Copyright © 2020-2023  润新知