是一道不错的构造题。

我们观察,一个 111 的前后必须都有 000.

那么,我们开一个二维数组 (vector)(vector)(vector),这样每遇到一个 000 就将 000 加入到当前的 G[cnt]G[cnt]G[cnt] 中,并

++cntcntcnt, 这样满足的性质是 kkk 到 cntcntcnt 的所有状态都是已 111 结尾的(或者为空),以此来判断是否有解。

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\n", 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("\n");
}
return 0;
}

CF949A Zebras 构造的更多相关文章

  1. CF949A/950C Zebras

    思路: 贪心乱搞. 实现: #include <bits/stdc++.h> using namespace std; vector<vector<int>> v; ...

  2. A - Zebras

    Oleg writes down the history of the days he lived. For each day he decides if it was good or bad. Ol ...

  3. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

  4. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

  5. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  6. Eos开发——构造查询条件

    1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...

  7. 【C++】类和对象(构造与析构)

    类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...

  8. Spring 设值注入 构造注入 p命名空间注入

    注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...

  9. 并发包的线程池第二篇--Executors的构造

    上一篇讲述了ThreadPoolExecutor的执行过程,我们也能看出来一个很明显的问题:这个线程池的构造函数比较复杂,对于不十分理解其运作原理的程序员,自己构造它可能体现和想象中不一样的行为.比如 ...

随机推荐

  1. Vue双向绑定

    vue的双向数据绑定的原理相信大家都十分了解:主要是通过ES5的Object对象的defineProperty属性:重写data的set和get函数来实现的. 该方法允许精确的添加或者修改对象的属性: ...

  2. MySQL 单表查询多表查询

    一 单表查询 表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex e ...

  3. Python基础学习_01修改代码所属作者

    1.修改开头的作者Author 2.具体步骤如下图 (1)点击下图所画的按钮 (2)具体操作如图所示,就可以得到自己想要的结果了.

  4. Centos 搭建activemq

    Centos 搭建activemq 1,官方下载  http://activemq.apache.org/activemq-5122-release.html apache-activemq-5.15 ...

  5. 一个很好的JS,ASP二级下拉框联动。

    在我们制作网站会员注册信息时,一般会涉及到填写自己所在省/市,如果用input或textarea做成填写形式不太理想.所以大部分网站都会选择联动下来列表形式,做起来也不算很复杂,同时看上去也很轻松. ...

  6. 面试准备专题——SOA架构

  7. SpringMVC在对应绑定不同实体,但具有相同属性名的解决方案....

    在springmvc中,可以对前台传递过来的参数进行与后台实体绑定(第二种方式相对较好). 比如: 前台页面: <form action="${pageContext.request. ...

  8. 邓_ Php·面试

    1:PHP的意思,它能干什么?       PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页,英文的全称(Professional Home Pages)1.Web ...

  9. FreeMarker 整合 springmvc

    一.添加 jar 包 <dependency> <groupId>org.freemarker</groupId> <artifactId>freema ...

  10. 简述Web Service通讯技术的搭建流程

    Web Service 基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级 ...