CF949A/950C Zebras】的更多相关文章

思路: 贪心乱搞. 实现: #include <bits/stdc++.h> using namespace std; vector<vector<int>> v; int main() { string s; while (cin >> s) { set<int> x, y; ; i < v.size(); i++) v[i].clear(); bool no_ans = false; ; i < s.length(); i++)…
题意:给你一个01串,问其是否能拆成若干形如0101010的子串,若能,输出所有子串的0,1 的位置. 题解:一开是暴力,然后瞎找规律, 最后找到一种神奇的线性构造法:扫一遍字符串,若为0就一直竖着往下写0,碰到1就回头往上写,再碰到0 就回头往下写······判断无法构造的依据:如果写1写得超过了上界就跳出,如果最后写的0不在最下面也跳出//codeforces上看到的一段代码秀的脑壳疼 坑:之前随便找规律,写了个巨丑的代码,逻辑混乱,直接wa掉. 无脑写的直接T了 ac #define _C…
题意 : 给出一个 01 串,要求你将其分隔出若干个子序列 ( 每个数字只能属于某一个子序列 ) ,子序列必须满足由 0 开头和结尾,且中间需 01 交替构成.若无法做到,则输出 -1. 分析 :  很容易想到需要去贪心配对 0 和 1 即 能 01 交替去构造就尽量选择这种方案,这样才能用更少的 0 去配对尽量多的 1 用 vector<int> idx[] 这个二维数组来装各个子序列的信息 使用两个 set 来装现在以 0 结尾以及以 1 结尾的子序列的下标 然后 O(n) 从左到右扫一遍…
借鉴自: https://www.cnblogs.com/SuuT/p/8619227.html https://blog.csdn.net/my_sunshine26/article/details/79502152 题意: 给定一个01字符串,需要你把它分为k个子序列,其中k可以为任意正整数. 对子序列的要求为 以0开始,以0结束 0,1相间 输出满足条件的一种结果即可.  输出的结果还要从低到高的顺序 扫一遍字符串,若为0就一直竖着往下写0,碰到1就回头往上写,再碰到0 就回头往下写···…
是一道不错的构造题. 我们观察,一个 111 的前后必须都有 000. 那么,我们开一个二维数组 (vector)(vector)(vector),这样每遇到一个 000 就将 000 加入到当前的 G[cnt]G[cnt]G[cnt] 中,并 ++cntcntcnt, 这样满足的性质是 kkk 到 cntcntcnt 的所有状态都是已 111 结尾的(或者为空),以此来判断是否有解. Code: #include<cstdio> #include<vector> #include…
C. Zebras time limit per test memory limit per test 512 megabytes input standard input output standard output Oleg writes down the history of the days he lived. For each day he decides if it was good or bad. Oleg calls a non-empty sequence of days a …
Oleg writes down the history of the days he lived. For each day he decides if it was good or bad. Oleg calls a non-empty sequence of days a zebra, if it starts with a bad day, ends with a bad day, and good and bad days are alternating in it. Let us d…
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, 010, 01010 这一类的01交替且开头和结尾都为0的序列被称为zebra序列.给出一段01序列,尝试能否把他分为k个子序列使得每个子序列都是zebra序列. 分析 这个题应该算是水题把,但是确实把我卡了. 一开始暴力找在序列中找1,然后分别往前往后各找一个0.但是最坏情况到O(n^2),TLE在第八组.然后我尝试了各种Set,vector,二分之类的瞎搞结果一直都没把复杂度降下来一直T在第八组绝望了. 赛后看其他人的代码发现··可以O(n)扫一遍,当s[i]是0的时候找加入最后…
Description 题目地址: Codeforces 题意:给你一串只含01的字符串,判断能否将字符串分为k个子序列,使得子序列满足以下条件: 开头和结尾都是0 相邻的2个数是01或者10 如0, 010, 01010 是合法的,1, 0110, 0101不合法 要求输出方案 (k可以为任意正整数,评测用SPJ) Solution 我们发现,0可以单独为一组,那么只要匹配完所有的1剩下的0全单独算就行了 对于方案可以用vector储存,关键在于如何划分子序列 开一个指针变量p和一个方案数cn…