CodeForces 1025C Plasticine zebra

2023-11-17

题目大意

题目链接
给定一个由wb组成的字符串,可以操作任意次,每次操作(0次或多次)可以将字符串分割成左右两个子串,左、右侧子串均前后颠倒。
问最终字符串中最多可以有多少个wb交错(wb无所谓顺序)。

题解

构造,比较好想。
总述:

  1. 当最左端字符与最右端字符不同时, max(左侧最长交错子串+右侧最长交错子串, 原最长交错子串)
  2. 当最左端字符与最右端字符相同时,原最长交错子串

详解:
首先推断出试出最多操作一次,操作多了也没用。(这个我是通过试着造样例发现的这个特点)
当第一个字符和最后一个字符一样的时候,无论从哪里分割都没什么用,因为左右子串颠倒完,分割处的两个字符还是同为wb,即无效操作。此时,我们就统计整个字符串中最长即可。
当第一个字符和最后一个字符不一样的时候 ,进行分割、颠倒属于有效操作。我们应当注意到,在操作完成之后,有可能更新最大长度的一定是包含分割处的一个交错子串。这个交错子串在分割处的左半部分是原字符串的最左端的若干字符,交错子串在分割处的右半部分是原字符串的最右端的若干字符串。因此我们要先求出,①原字符串中以第一个字符开始的交错子串长度,②原字符串中以最后一个字符结尾的交错子串长度。枚举分割处,分割处左侧能贡献的交错子串长度为min(分割处左侧子串的长度, ①),分割处右侧能贡献的交错子串长度为min(分割处右侧子串的长度, ②),二者之和与原字符串(即未进行操作)中的最长交错子串取个最大值即为答案。
注意:一个字符时最长交错子串长度为1(坑了我一发)

代码

#include<bits/stdc++.h>
using namespace std;
string str;
int a[100010];
int main()
{
	cin>>str;
	int n = str.length();
	
	for(int i = 0;i < n;i ++) a[i+1] = (str[i] == 'b'?1:0);
	
	int len  = 1, maxlen = 1;
	for(int i = 1;i < n;i ++) {
		if(a[i] ^ a[i+1]) len ++;
		else maxlen = max(maxlen, len), len = 1;
	}
	maxlen = max(maxlen, len);
	
	if(a[1] == a[n]) {
		cout << maxlen << endl; 
	} else {
		int ans = maxlen, maxlenleft = 0, maxlenright = 0;
		
		len = 1;
		for(int i = 1;i < n;i ++) 
			if(a[i] ^ a[i+1]) len ++;
			else break;
		maxlenleft = max(maxlenleft, len);
		
		len = 1;
		for(int i = n-1;i > 0;i --) 
			if(a[i] ^ a[i+1]) len ++;
			else break;
		maxlenright = max(maxlenright, len);
		
//		cout << maxlenleft << ' ' << maxlenright << endl;
		
		for(int i = 1;i < n;i ++) 
			ans = max(ans, min(i, maxlenleft) + min(n-i, maxlenright));
		cout << ans <<endl;
	}
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodeForces 1025C Plasticine zebra 的相关文章

  • 蓝桥杯2020年第十一届国赛真题-重复字符串

    说在前面 本题的标程是存在问题的 下面会分析标程与正确程序 题目 题目连接 题解 思维吧 整体思路 将字符串分割成k段 假设每段m个字符 我们统计每段相同位置的每种字符出现的次数 每段都统计上后 每个位置 0 m 1 都取出现次数最多的字符
  • 2021杭电多校第三场-Road Discount-wqs二分+最小生成树

    Description There are n cities in Byteland labeled by 1 to n The Transport Construction Authority of Byteland is plannin
  • 2017年蓝桥杯B组C/C++省赛-K倍区间

    题目 题解 思维 暴力的话是会超时的 但也可以骗点分 采用差分数组暴力 讲一下AC思路 统计出来每个前缀和取模 k k k后结果的个数 比如 c n t
  • UPC-混合训练第十五场

    gift 题目描述 战争结束 A国和B国的元首决定两国友好相处 于是城市之间就有互相送礼的情况 参与这次相互协助计划中有n个A国的城市和m个B国的城市 作为A国的重臣 小Q了解到每一个A国的城市送出了ai份礼物 B国的城市收到了bi份礼物
  • 2021-07-21训练日记upc联通数(思维)

    A 联通数 题目描述 数学高手小G最近发现了一种新型的数 他首先在草稿纸写下任意长度的数字串kkkkkkkkkkk 1 k 9 并在其中间添加加号 且相邻两个加号之间至少含有两个数字k 默认数字串第一个数字前与最后一个数字后也有两个加号 然
  • [2018 ICPC 青岛] 解题记录ing

    M Function and Function 队友说直接暴力即可 include
  • 2020年蓝桥杯国赛-答疑

    题目 题目链接 题解 贪心 有点像 排队打水 比较好想 而且我甚至都能证明 贪心思路 按照 s a e s a e s a e 从小到大排序即可 证明 首先 每个人的
  • Codeforces 1554C - Mikasa MEX

    input 5 3 5 4 6 3 2 69 696 123456 654321 output 4 3 0 640 530866 给出n m从n 0 gt n m中最小为出现的非负整数 int main int read while int
  • 1010 Radix (25 分)

    题目 题目链接 题解 二分 数学 先说几点注意事项 开 LL 最高进制不是35 可以更高 枚举可能的进制时存在爆LL的情况 整体思路 先计算出知道进制的那个数对应的十进制数 二分进制 找到某个进制使得另一个数对应的十进制数与已知的十进制数相
  • Codeforces Round #723 (Div. 2)B. I Hate 1111

    Description You are given an integer x Can you make x by summing up some number of 11 111 1111 11111 You can use any num
  • Modulo Summation——UPC

    题目描述 You are given N positive integers a1 a2 aN For a non negative integer m let f m m mod a1 m mod a2 m mod aN Here X m
  • edu99 div.2 Sequence and Swaps优雅的暴力

    time limit per test1 5 seconds memory limit per test512 megabytes inputstandard input outputstandard output Example inpu
  • CodeForces 920C Swap Adjacent Elements

    题目大意 题目链接 给定一个序列 这个序列可以理解为一个1 n的全排列 再给出一个01串 1表示可以将索引i和i 1进行交换 且交换可以发生任意次 0表示不可以 问最后能不能将序列升序排列 题解 几乎 秒杀 因为简单 判断每个索引处的数能不
  • APAC 2013 部分题解

    目录 A The Alphabet Sticker C Increasing Shortest Path D Cup of Cowards E Balloons Colors F NASSA s Robot G The Stones Gam
  • 蓝桥杯2019年第十届省赛真题-扫地机器人

    题目 题目链接 题解 二分 贪心 二分模板 看到这道题第一时间想到的就是二分和动规 仔细一看二分有戏 能check出来 所以决定用二分好好想想 主要是因为我动规太菜了 怕了 二分时间 准确的说我们二分的不是时间 而是覆盖范围 也就是枚举每个
  • 2021蓝桥杯模拟赛-删除字符

    题目 题目链接 题解 贪心 贪心思路 将整个字符串视为若干段降序排列的子串 即 从左边开始向右遍历 遇到逆序的就删除 再对新的串从头遍历找逆序 不停地重复整个过程是为了保证删除的尽可能靠前 贪心 如果整个字符串都顺序了 但是还要删 那么就从
  • 蓝桥杯2019年第十届省赛真题-Fibonacci 数列与黄金分割

    题目 题目链接 题解 我未曾设想的道路 我居然以为是高精度的矩阵快速幂 差点心态崩了 直接看了题解 1 50 打个表 发现到20 小数点后八位就不变了 所以 解决 代码 include
  • Early Orders单调栈

    链接 题目描述 You are given a list of integers n and a number k It is guaranteed that each i from 1 to k appears in the list a
  • CodeForces 1025C Plasticine zebra

    题目大意 题目链接 给定一个由w和b组成的字符串 可以操作任意次 每次操作 0次或多次 可以将字符串分割成左右两个子串 左 右侧子串均前后颠倒 问最终字符串中最多可以有多少个w和b交错 w和b无所谓顺序 题解 构造 比较好想 总述 当最左端
  • Educational Codeforces Round 98 (Rated for Div. 2)B-Toy Blocks

    B Toy Blocks time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Y

随机推荐

  • opencv-图片矫正

    转载 https www jianshu com p a1838972d1da 对于倾斜的图片通过矫正可以得到水平的图片 一般有如下几种基于opencv的组合方式进行图片矫正 1 傅里叶变换 霍夫变换 直线 角度 旋转 2 边缘检测 霍夫变
  • 英国程序员的工资

    我在英国做程序员工作将近2年了 接触到他们当地的一些的程序员 他们的大概工资如下 一个刚刚从学校毕业的计算机系大学生 月工资水平大概是2000到3000英镑左右 约合人民币3万至4 5万元 这是税前收入 英国是一个高税收高福利的国家 如果你
  • Windows上如何使用SWIG (c++ android 示例)

    SWIG介绍 SWIG Simplified Wrapper and Interface Generator 即简化包以及接口生成器 为脚本语言 tcl perl python等 提供了C和C 的接口 SWIG在1995年在Los Alam
  • 获取nan只能用numpy,不能用pandas

    a pd Series a b pd nan d AttributeError module pandas has no attribute nan a pd Series a b np nan d print a 0 a 1 b 2 Na
  • c语言输入并判断成绩等级

    输入并判断成绩等级 include
  • 华为OD机试 - 总最快检测效率(Java)

    题目描述 在系统 网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查 每名采样员的效率不同 采样效率为N人 小时 由于外界变化 采样员的效率会以M人 小时为粒度发生变化 M为采样效率浮动粒度 M N 10 输入保证N 10 的结
  • 数据结构与算法 各类数图概念集合

    拓扑排序 有向无环图才能进行拓扑排序 理解 就是在大学期间所有的课程 你只有先学完计算机基础 才能学更加高深的课程 从一个入度为0的点出发 找下一个一直到最后就是拓扑排序 前 中 后序排序 前 根左右 中 左中右 后 左右中 要确定一颗二叉
  • <毕业设计>最适合大学生的12个Java系统项目(附源码)

    就业 毕业设计 Java项目合集 小编给大家整理了12个Java系统项目 附源码 白嫖到底 最合适大学生学习的Java毕业设计教程合集 合集视频教程链接 https www bilibili com video BV1pB4y1h7Pr s
  • [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒 同样可以通过Spider获取网站内容 最近学习了Selenium Phantomjs后 准备利用它们获取百度百科的旅游景点消息盒 InfoBox 这也是毕业设计实体对齐和属
  • 1Panel 安装部署

    1Panel 是一个现代化 开源的 Linux 服务器运维管理面板 1 环境要求 安装前请确保您的系统符合安装条件 操作系统 支持主流 Linux 发行版本 基于 Debian RedHat 包括国产操作系统 服务器架构 x86 64 aa
  • Limit

    Mysql limit用法 select from test LIMIT 3 当 limit后面跟一个参数的时候 该参数表示要取的数据的数量 表示直接取前三条数据 以下的两种方式均表示取2 3 4三条条数据 select from test
  • R语言深度学习:智能客服聊天机器人

    目录 一 准备工作 二 数据预处理 三 构建模型 1 准备训练数据 2 构建seq2seq模型
  • Ubuntu18.04安装docker及nvidia docker、NVIDIA Container Toolkit

    1 卸载旧版docker sudo apt get remove docker sudo apt get remove auto remove docker sudo apt remove docker ce 如果上面方法都不行直接 使用d
  • PID控制算法学习与Matlab仿真

    文章目录 起因 算法原理 算法解析 调参小技巧 Matlab仿真 起因 PID控制算法应该是包括工业机器人等各种行业和领域中非常常用的一种控制算法了 了解这个算法的起因是在稚晖君开发的自行车项目中见到 后来在北理工组会中了解到PID控制算法
  • ssrf漏洞描述

    ssrf是一种由攻击者构造请求 由服务端发起请求的安全漏洞 一般情况下 ssrf攻击的目标是外网无法访问的内部系统 ssrf漏洞原理 ssrf的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制 例如 服务
  • 玄铁C910总览

    一 开源玄铁C910简介 玄铁C910是由平头哥设计并开源的高性能CPU 基于开源的RISC V指令集 主要面向对性能要求严格的边缘计算领域 如边缘服务器 边缘计算卡 高端机器视觉 高端视频监控 自动驾驶 移动智能终端 5G 基站等 玄铁C
  • SAP-ABAP-DOI技术的优化与说明

    SAP ABAP DOI技术的优化与说明 阅后感 不错的一篇文章 自己收藏下 顺带分享给众人 看完本文章后 大家也可以学习下 DOI 的API文档 当有需求直接下载本地时 可以应用CALL i oi document proxy的一个方法S
  • c# 访问共享文件夹 用户名或密码不正确 及 拒绝访问

    组策略 计算机配置 Windows设置 安全设置 本地策略 安全选项 网络访问 本地帐户的共享和安全模型 改为 经典 本地用户以自己身份验证 不改会出现用户名和密码错误 拒绝访问 安全里添加用户
  • day075:XML的约束:DTD约束文档、DTD约束文档的三种引入方法、DTD语法规则

    目录 一 DTD约束 1 什么是DTD约束 2 创建DTD约束文档的步骤 3 代码示例 4 引入DTD约束文档的三种方法 1 引入本地DTD约束文档 2 在xml文件内部引入 3 从网络引入dtd文件 二 DTD语法规则 DTD定义元素 标
  • CodeForces 1025C Plasticine zebra

    题目大意 题目链接 给定一个由w和b组成的字符串 可以操作任意次 每次操作 0次或多次 可以将字符串分割成左右两个子串 左 右侧子串均前后颠倒 问最终字符串中最多可以有多少个w和b交错 w和b无所谓顺序 题解 构造 比较好想 总述 当最左端