codeforce469DIV2——C. Zebras
题意
0, 010, 01010 这一类的01交替且开头和结尾都为0的序列被称为zebra序列。给出一段01序列,尝试能否把他分为k个子序列使得每个子序列都是zebra序列。
分析
这个题应该算是水题把,但是确实把我卡了。
一开始暴力找在序列中找1,然后分别往前往后各找一个0。但是最坏情况到O(n^2),TLE在第八组。然后我尝试了各种Set,vector,二分之类的瞎搞结果一直都没把复杂度降下来一直T在第八组绝望了。
赛后看其他人的代码发现··可以O(n)扫一遍,当s[i]是0的时候找加入最后一个是1的方案,若是1则加入最后一个是0的方案。如果没有合适的方案,就新开一个。可以用优先队列或者set搞
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int maxn=+;
char s[maxn];
priority_queue<int,vector<int>,greater<int> >q0,q1;
vector<int>Q[maxn];
int n,p;
int main(){
scanf("%s",s+);
n=strlen(s+);
p=;
bool ok=;
for(int i=;i<=n;i++){
if(s[i]==''){
if(q0.empty()){
ok=;
break;
}
int tmp=q0.top();
q0.pop();
Q[tmp].push_back(i);
q1.push(tmp);
}else{
if(q1.empty()){
p++;
Q[p].push_back(i);
q0.push(p);
}else{
int tmp=q1.top();
q1.pop();
Q[tmp].push_back(i);
q0.push(tmp);
}
}
}
if(!ok||!q1.empty()){
printf("-1");
return ;
}
printf("%d\n",p);
for(int i=;i<=p;i++){
printf("%d ",Q[i].size());
for(int j=;j<Q[i].size();j++)
printf("%d ",Q[i][j]);
printf("\n");
}
return ;
}
codeforce469DIV2——C. Zebras的更多相关文章
- Codeforces Round #469 (Div. 2)C. Zebras(思维+模拟)
C. Zebras time limit per test memory limit per test 512 megabytes input standard input output standa ...
- A - Zebras
Oleg writes down the history of the days he lived. For each day he decides if it was good or bad. Ol ...
- Codeforces 950 C. Zebras
http://codeforces.com/contest/950/problem/C 题意: 给出一个01序列,问能否将这个序列分为若干个0开头0结尾的序列 输出方案 如果有解,几个1能在一个序列就 ...
- CodeForces - 950C Zebras 模拟变脑洞的天秀代码
题意:给你一个01串,问其是否能拆成若干形如0101010的子串,若能,输出所有子串的0,1 的位置. 题解:一开是暴力,然后瞎找规律, 最后找到一种神奇的线性构造法:扫一遍字符串,若为0就一直竖着往 ...
- Zebras CodeForces - 950C(思维)
借鉴自: https://www.cnblogs.com/SuuT/p/8619227.html https://blog.csdn.net/my_sunshine26/article/details ...
- codeforce469DIV2——E. Data Center Maintenance
题意: 有n个数据中心,m个客户,每天有h个小时,其中 n,m,h<=100000.每个数据中心i每天都会有一个数据维护的时间0<=u[i]<=h-1,在数据中心维护期间时不可以使用 ...
- codeforce469DIV2——D. A Leapfrog in the Array
题意: 给出1<=n<=10^18和1<=q<=200000,有一个长度为2*n-1的数组,初始时单数位置存(i+1)/2,双数位置是空的.每次找出最右边的一个数将它跳到离它最 ...
- [CodeForces950C]Zebras
Description 题目地址: Codeforces 题意:给你一串只含01的字符串,判断能否将字符串分为k个子序列,使得子序列满足以下条件: 开头和结尾都是0 相邻的2个数是01或者10 如0, ...
- CF949A/950C Zebras
思路: 贪心乱搞. 实现: #include <bits/stdc++.h> using namespace std; vector<vector<int>> v; ...
随机推荐
- opencv 识别答题卡
参考这个网站,然后自己 找了张图片试了一下 http://blog.csdn.net/cp562090732/article/details/47804003 // test.cpp : 定义控制台应 ...
- 压缩感知Compressive sensing(一)
compressive sensing(CS) 又称 compressived sensing ,compressived sample,大意是在采集信号的时候(模拟到数字),同时完成对信号压缩之意. ...
- DbEntry 默认 主键ID为long
DbEntry 默认 主键ID为long,如果自己表中的主键ID为int,可以通过以下方式修改: public class Company :DbObjectModel<Company,int& ...
- MAC OS X常用命令总结
附录:UNIX常用命令 ============================================================================ 1. cd ...
- SQLite3的运用
1.导入库文件:libsqlite3. 2..m文件的代码: // // ViewController.m // SQLite3的运用 // // Created by PengYunjing on ...
- 关于fpga的m9k的部分理解
1.控制信号包括时钟使能,读写使能,字节使能,地址使能,异步清零等 2.可配置为单端口,简单双端口,真双端口,fifo,rom,移位寄存器. 3.关于移位寄存器模式的介绍如下: 一个 ( w × m ...
- 转 OpenFaaS 介绍
来源: https://thenewstack.io/openfaas-put-serverless-function-container/?utm_source=tuicool&utm_me ...
- 【Xamarin】MonoTouch - iOS 使用 UIImagePickerController 打开图片库和相机选择图片修改头像
Application tried to present modally an active controller <UIImagePickerController: 0x7b6ff400> ...
- Oracle终极数据恢复,孰弱孰强(DUL vs AUL)
这几天在帮朋友作数据恢复,由于已经到了无可救药的地步,只能使用终极手段进行恢复,直接从文件中读取数据进行恢复. 在恢复过程中反复对比了DUL和dcba的AUL,感觉到了两者的不同. DUL在处理文件损 ...
- bzoj 3295 (洛谷3157、3193) [Cqoi2011]动态逆序对——树套树 / CDQ分治
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 题目--洛谷3157:https://www.luogu.org/problemnew ...