链接:https://www.nowcoder.com/acm/contest/134/I
来源:牛客网

题目描述

铁子的班级在毕业晚会有一个合唱节目,到了毕业晚会的时候,他们必须排成一排一起合唱"认错","当然是选择原谅他"等一系列原谅歌曲,但是当队形布置好的时候,领导们觉得队形里最长的连续的女生的长度太小了,但是由于马上要开始演唱,所以最多只能两个人交换位置,问新队形中最长的连续的女生的长度是多少?

输入描述:

第一行一个数字n表示铁子班级的总人数。1≤n≤10

5

第二行一个字符串s表示最初的队形布置,si=0表示第i个人是女生,si=1表示第i个人是男生。

输出描述:

输出一行表示答案

输入例子:
6
101010
输出例子:
3

-->

示例1

输入

复制

6
101010

输出

复制

3

说明

将第6个女生和第3个男生交换位置可以满足要求

分析:考虑分离字符串,将一串只含0,1的字符串中每段连续的1和连续的0的字符串分离出来,即保存下每一段连续的长度
  此时:如果分离出的0连续的字符串数是0,答案就是0
    如果分离出0连续的字符串数是1,答案就是e[0],代表那一段连续的0的个数
    如果分离出0连续的字符串数是2,答案就是max(e[0],e[1])+1,边上的一个字符可以被替换成0
    如果大于2,因为只能交换两个字符,所以考虑取单独的+1和两个中间只隔1个不同的相加再加一(此时交换一个字符后两个连续字符串可以合并起来)的最大值
AC代码:
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define ls (r<<1)
#define rs (r<<1|1)
#define debug(a) cout << #a << " " << a << endl
using namespace std;
typedef long long ll;
const ll maxn = 1e5+10;
const ll mod = 998244353;
const double pi = acos(-1.0);
const double eps = 1e-8;
vector<ll> e, d; //e保存每段连续0的个数,d保存每段连续1的个数
string s;
int main() {
ios::sync_with_stdio(0);
ll n;
while( cin >> n ) {
e.clear();
d.clear();
cin >> s;
ll cnt = 0, num = 0, flag = false;
for( ll i = 0; i < n; i ++ ) {
if(!flag) {
if( s[i] == '0' ) {
if(num) {
d.push_back(num);
}
num = 0, cnt ++, flag = true;
if( i == n-1 ) {
e.push_back(cnt);
}
} else {
num ++;
}
} else {
if( s[i] == '0' ) {
cnt ++;
if( i == n-1 ) {
e.push_back(cnt);
}
} else {
e.push_back(cnt);
num ++, cnt = 0, flag = false;
}
}
}
if( e.size() == 0 ) {
cout << 0 << endl;
} else if( e.size() == 1 ) {
cout << e[0] << endl;
} else if( e.size() == 2 ) {
cout << max(e[0],e[1])+1 << endl;
} else {
ll maxnum = e[0];
ll j;
if( s[0] == '1' ) {
j = 1;
} else {
j = 0;
}
for( ll i = 1; i < e.size(); i ++, j ++ ) {
if( d[j] == 1 ) {
maxnum = max(maxnum,e[i]+e[i-1]);
} else {
maxnum = max(maxnum,e[i]);
} }
cout << maxnum+1 << endl;
}
}
return 0;
}
/*
10
0010111000
*/

  

牛客小白月赛4 I 合唱队形 思维 字符串的更多相关文章

  1. 牛客小白月赛4——I—合唱队形

    链接:https://www.nowcoder.com/acm/contest/134/I来源:牛客网 题目描述 铁子的班级在毕业晚会有一个合唱节目,到了毕业晚会的时候,他们必须排成一排一起合唱&qu ...

  2. 牛客小白月赛3 B 躲藏【动态规划/字符串出现cwbc子序列多少次】

    链接:https://www.nowcoder.com/acm/contest/87/B来源:牛客网 XHRlyb和她的小伙伴Cwbc在玩捉迷藏游戏 Cwbc藏在多个不区分大小写的字符串中. 好奇的X ...

  3. 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

    求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

  4. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  5. 牛客小白月赛8 - E - 诡异数字 数位DP

    牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...

  6. 牛客小白月赛18 Forsaken给学生分组

    牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 ​ Forsaken有 ...

  7. 牛客小白月赛18 Forsaken喜欢数论

    牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 ​ Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...

  8. 牛客小白月赛19 E 「火」烈火燎原 (思维,树)

    牛客小白月赛19 E 「火」烈火燎原 (思维,树) 链接:https://ac.nowcoder.com/acm/contest/2272/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  9. 【牛客小白月赛21】NC201604 Audio

    [牛客小白月赛21]NC201604 Audio 题目链接 题目大意: 给出三点 ,求到三点距离相等的点 的坐标. 解析 考点:计算几何基础. 初中蒟蒻表示不会什么法向量.高斯消元..qwq 方法一: ...

随机推荐

  1. 消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)

    前言 最近在学习消息中间件--RabbitMQ,打算把这个学习过程记录下来.此章主要介绍环境搭建.此次主要是单机搭建(条件有限),包括在Windows.Linux环境下的搭建,以及RabbitMQ的监 ...

  2. C# Winfrom 自定义控件——带图片的TextBox

    效果: 描述: 本来是想用GDI在左边画图片上去的,文本是居中对齐,如果文本是左对齐,文本会把图片遮住控件长这样: 但这样做,输入框在获取焦点时候,会把图片挡住就像这样: 输入完成之后图片就会显示完整 ...

  3. 第十章 Fisco Bcos 权限控制下的数据上链实操演练

    一.目的 前面已经完成fisco bcos 相关底层搭建.sdk使用.控制台.webase中间件平台等系列实战开发, 本次进行最后一个部分,体系化管理区块链底层,建立有序的底层控管制度,实现权限化管理 ...

  4. IO流与NIO流

    JAVA IO流最详解   (转自CSDN) IO流上:概述.字符流.缓冲区(java基础)   一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数 ...

  5. 开发一个Spring Boot Starter!

    在上一篇文章中,我们已经了解了一个starter实现自动配置的基本流程,在这一小结我们将复现上一过程,实现一个自定义的starter. 先来分析starter的需求: 在项目中添加自定义的starte ...

  6. 为什么unsigned (-1)表示无符号整数的最大值

    整数在计算机中的表示 在计算机中,整数采用补码表示.当前主流编译器中整型在内存中占用四个字节,共32位. 机器数:一个数在计算机中的二进制表示形式, 叫做这个数的机器数.机器数是带符号的,在计算机用一 ...

  7. Go中的命名规范

    1.命名规范 1.1 Go是一门区分大小写的语言. 命名规则涉及变量.常量.全局函数.结构.接口.方法等的命名. Go语言从语法层面进行了以下限定:任何需要对外暴露的名字必须以大写字母开头,不需要对外 ...

  8. SonarQube系列一、Linux安装与部署

    [前言] 随着项目团队规模日益壮大,项目代码量也越来越多.且不说团队成员编码水平层次不齐,即便是老手,也难免因为代码量的增加和任务的繁重而忽略代码的质量,最终的问题便是bug的增多和代码债务的堆积.因 ...

  9. 利用cookie实现浏览器中多个标签页之间的通信

    原理: cookie是浏览器端的存储容器,而且它是多页面共享的,利用cookie多页面共享的特性,可以实现多个标签页的通信. 比如: 一个标签页发送消息(将发送的消息设置到cookie中),一个标签页 ...

  10. 工作中常见的五种技术leader

    力不从心型 在工作中有种技术leader,总认为自己是最好的.在方案设计的时候,自己有一种方案,下属有一种方案.leader非要别人听他的.如果两种方案没有优劣之分,比较建议的做法是让真正实施的人按照 ...