zoukankan      html  css  js  c++  java
  • 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;
    }
    
    不如吃茶去
  • 相关阅读:
    代码走读 airflow 2
    sql 查询相关
    控制你的鼠标和键盘
    TODO
    二进制流的操作收集
    daterangepicker-双日历
    datetimepicker使用
    ADO执行事务
    动态添加表sql
    执行带返回值的存储过程
  • 原文地址:https://www.cnblogs.com/pushinl/p/8942498.html
Copyright © 2011-2022 走看看