zoukankan      html  css  js  c++  java
  • CF949A Zebras 构造

    是一道不错的构造题。
    我们观察,一个 11 的前后必须都有 00.
    那么,我们开一个二维数组 (vector)(vector),这样每遇到一个 00 就将 00 加入到当前的 G[cnt]G[cnt] 中,并
    ++cntcnt, 这样满足的性质是 kkcntcnt 的所有状态都是已 11 结尾的(或者为空),以此来判断是否有解。

    Code:

    #include<cstdio>
    #include<vector>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn = 200000 + 5;
    char str[maxn];
    vector<int> G[maxn];
    inline void fail(){ printf("-1");  exit(0); }
    int main()
    {
        scanf("%s", str);
        int n = strlen(str), cnt = 0, k = 0;
        for(int i = 0;i < n; ++i)
        {
            if(str[i] == '0')  {
                G[cnt++].push_back(i + 1);
            }
            else
            {
                if(cnt == 0) fail(); 
                G[--cnt].push_back(i + 1);       
                k = max(k, cnt);
            }
        }
        if(k >= cnt) fail();
        printf("%d
    ", cnt);
        for(int i = 0;i < cnt; ++i)
        {
            printf("%d ", G[i].size());
            for(int j = 0;j < G[i].size(); ++j) printf("%d ",G[i][j]);
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    1924班网址
    20192414《网络空间安全导论》第一周学习总结
    H-Angry
    A-Plague Inc
    B-Rolling The Polygon
    F-Moving On
    A-Maximum Element In A Stack
    J-Word Search
    E-Pawns
    D-Lift Problems
  • 原文地址:https://www.cnblogs.com/guangheli/p/9845107.html
Copyright © 2011-2022 走看看