http://codeforces.com/contest/950/problem/C

题意:

给出一个01序列,问能否将这个序列分为若干个0开头0结尾的序列

输出方案

如果有解,几个1能在一个序列就在一个序列 一定可以找到解

因为0可以单独1个序列,1必须要依托于0

2个1如果分开 要4个0,连起来要3个0

暴力的做法就是:

如果当前是0,扫一遍已有序列,如果有1结尾的就把这个0放到那个1的后面

没有以1结尾的序列,新建一个序列

如果当前是1,扫一遍已有序列,如果有0结尾的就把这个1放到那个0的后面

没有以0结尾的就无解

极限复杂度是n^2 的

怎么优化?

用vector,cnt记录下一个0要放在哪个vector

如果是0就放在这个cnt所在的vector,cnt++

如果是1那就放到cnt-1所在的vector,先--cnt,再放1

#include<cstdio>
#include<vector>
#include<cstring> using namespace std; #define N 200005 char s[N];
vector<int>V[N]; int main()
{
scanf("%s",s+);
int len=strlen(s+);
if(s[]=='')
{
printf("-1");
return ;
}
int cnt=,tot=;
for(int i=;i<=len;++i)
{
if(s[i]=='') V[cnt++].push_back(i);
else V[--cnt].push_back(i);
if(!cnt && s[i+]=='')
{
printf("-1");
return ;
}
tot=cnt>=tot ? cnt : tot;
}
for(int i=;i<tot;++i)
if(s[V[i][V[i].size()-]]=='')
{
printf("-1");
return ;
}
printf("%d",tot);
int siz;
for(int i=;i<tot;++i)
{
siz=V[i].size();
printf("\n%d",siz);
for(int j=;j<siz;++j) printf(" %d",V[i][j]);
}
return ;
}

Codeforces 950 C. Zebras的更多相关文章

  1. Codeforces 950 D. A Leapfrog in the Array

    http://codeforces.com/contest/950/problem/D 前n/2个格子的奇数下标的数没有参与移动 候n/2个格子的奇数下标的数一定是一路移向偶数下标移 所以还原数的初始 ...

  2. Codeforces 950.E Data Center Maintenance

    E. Data Center Maintenance time limit per test 1 second memory limit per test 512 megabytes input st ...

  3. Codeforces 950 010子序列拆分 数列跳棋

    A B a,b两个序列分成K段 每一段的值相等 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset ...

  4. Codeforces Round #469 (Div. 2)C. Zebras(思维+模拟)

    C. Zebras time limit per test memory limit per test 512 megabytes input standard input output standa ...

  5. CodeForces - 950C Zebras 模拟变脑洞的天秀代码

    题意:给你一个01串,问其是否能拆成若干形如0101010的子串,若能,输出所有子串的0,1 的位置. 题解:一开是暴力,然后瞎找规律, 最后找到一种神奇的线性构造法:扫一遍字符串,若为0就一直竖着往 ...

  6. 【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)

    剧毒比赛,至少涨了分对吧.: ( [A]Left-handers, Right-handers and Ambidexters 题意: 有\(l\)个右撇子,\(r\)个左撇子,\(a\)个双手都惯用 ...

  7. Zebras CodeForces - 950C(思维)

    借鉴自: https://www.cnblogs.com/SuuT/p/8619227.html https://blog.csdn.net/my_sunshine26/article/details ...

  8. Codeforces 950C Zebras ( 贪心 && 模拟 )

    题意 : 给出一个 01 串,要求你将其分隔出若干个子序列 ( 每个数字只能属于某一个子序列 ) ,子序列必须满足由 0 开头和结尾,且中间需 01 交替构成.若无法做到,则输出 -1. 分析 :  ...

  9. Data Center Maintenance CodeForces - 950E

    http://codeforces.com/contest/950/problem/E 贴一份板子 #include<cstdio> #include<vector> #inc ...

随机推荐

  1. js中如何优雅的写if判断

    我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃 ...

  2. linux_查看磁盘与目录容量

    一.查看磁盘容量命令df(report file system disk space usage) 终端运行 $ df 输出结果 我的物理主机上的 /dev/sda5 是对应着主机硬盘的分区,字母 a ...

  3. calico实现docker容器内部的网络链接

    calico官网 https://www.projectcalico.org// calico介绍 http://www.sdnlab.com/17161.html calico网络 环境 系统   ...

  4. mysql问题处理积累

    1.mysql errors:message from server: "Host 'xxx' is blocked because of many connection errors; u ...

  5. loadrunner分析结果二

    5 worst transaction transaction name:事务名 failure ratio[%](exceeded time/transaction duration)失败率 (超标 ...

  6. Codeforces Round #545 (Div. 1)

    本来开头两道题写得挺快的,然后第三题想了一会儿胡出一个scc计算gcd的做法,写了一发凭借信仰交了上去结果一发pp了?然后第四题沙雕了想了很久才会,于是罚时瞬间变多.结果后面两题都没时间看了,赛后感觉 ...

  7. lambda 分类抽取N条

    从每个分类中,按照比例抽取 lista中percent是比例,按照这个比例抽取. static List<A> lista = new List<A>() { new A(){ ...

  8. 码云平台IDEA系列的插件使用

    一.IDEA插件安装 file -- setting --  Plugins -- 搜索gitee --  Search in repositories 安装后重启编译器 二.登录并拉取项目 file ...

  9. MT【27】对数方程组求范围

    解答:3 评论:此类题目通性通法为换元后化归为线性规划问题.当然不等式凑配也是常见技巧,只是容易范围扩大或者缩小.

  10. Android自动化测试探索

    Android自动化测试探索 前言 通常来说,我们开发完成产品之后,都是由测试组或者是我们自己点一点,基本上没有问题了就开始上线.但是,随着时间的堆叠,一款产品的功能也越来越多.这时,我们为了保证产品 ...