每日一道算法题day-one(备战蓝桥杯)

从今天开始博主会每天做一道算法题备战蓝桥杯,并分享博主做题的思路,有兴趣就加入我把!

算法题目:

有一个长度为 N  的字符串 S ,其中的每个字符要么是 B,要么是 E

我们规定 S  的价值等于其中包含的子串 BB 以及子串 EE 的数量之和。

例如,BBBEEE 中包含 22 个 BB 以及 22 个 EE,所以 BBBEEE 的价值等于 44。

我们想要计算 S  的价值,不幸的是,在我们得到 S 之前,约翰将其中的一些字符改为了 F

目前,我们只能看到改动后的字符串 S对于其中的每个 F,我们并不清楚它之前是 B 还是 E

请你计算,改动前的 S 有多少种可能的价值并将所有可能价值全部输出。

输入格式

第一行包含一个整数 N。

第二行包含改动后的字符串 S。

输出格式

第一行输出一个整数 K,表示改动前的 S 的可能价值的数量。

接下来 K 行,按照升序顺序,每行输出一个可能价值。

输入样例1:

4
BEEF

输出样例1:

2
1
2

输入样例2:

9
FEBFEBFEB

输出样例2:

2
2
3

输入样例3:

10
BFFFFFEBFE

输出样例3:

3
2
4
6

 思路:

我们看字符串的F和E太过于麻烦,我们给抽象成01字符串,更清晰的看出关系

现在有这样一段字符串:
xx01xxx0010xxx011xx110

这段字符串中,有四段x组成的子字符串,而这四段子字符串,都是相互独立的,修改其中任意一端,都不会影响到其他三段的数值,所以我们可以把这四段各自对应的情况拿出来单独讨论,最后再合并到一起,就能求出答案:

步骤:

第一步,先分析每一段连续的x的价值有哪些。
第二步,再分析所有段的价值之和有哪些
k为x的数量
情况1:xxxxx 
长度为五的x,最多有四个相邻对,所以最大值是4,最小值自然是0  取值:0,1,2,……,k-1
情况2:(0xxxxx/1xxxxx)/(xxxxx0/xxxxx1) 
当我们x全取取相邻相同的数时,最大值就是k,最小值是0
取值:0,1,2,……,k
情况3:0xxxxxx0/1xxxxxx1 
最多就是都取成一样的 :k+1个 最少 :0个
但是我们中间画五个x最少是0个,但是如果中间是偶数呢,大家自己模拟一下,最少就会有一个,所以情况三就要分情况
最多: k+1

最少:       k+1是偶数:0 
       k+1是奇数:1
大家自己画图模拟一下很明了
现在要最大和最小都有了,自然要考虑中间的数能不能取到,每当我们改变一个数,就会改变两个数对的值,所以可以取值的数就是公差为2的等差数列
所以取值:k+1,k-1,k-3,……,0/1(取决于k的奇偶性)
第四种情况: 0xxxxx1/1xxxxx0  最多k个,和左边或者右边相同,
最小依旧是分情况讨论:
            k是偶数: 0个
            k是奇数: 1个
都是画图,通俗易懂
取值:每改变一个x,影响周围的两数对,所以取值依旧是公差为2的等差数列
k,k-2,k-4,……,1/0(取决k的奇偶性)

现在我们把每一种情况和段落都分析完了,可以进行合并了

问题1:如果我们合并两个公差为2的等差数列,会得到什么样的结果:
答案:会得到一个新的公差为2的等差数列,最小值是两个数列的最小值相加,最大值是两个数列的最大值相加
问题二:如果我们合并一个公差为2的等差数列和一个公差为1的等差数列,会得到什么样的结果?
答案,会得到一个公差为一的等差数列,最小值最大值同上


最终做法:
第一步:先求中间段。
第二步:再求两边的段
第三步:合并第一步和第二步的结果

 

 题解代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;int n;
string s;int main()
{cin >> n >> s;if (s == string(n, 'F')){cout << n << endl;for (int i = 0; i < n; i ++ )cout << i << endl;}else{int l = 0, r = n - 1;while (s[l] == 'F') l ++ ;while (s[r] == 'F') r -- ;int low = 0, high = 0;auto str = s;for (int i = l; i <= r; i ++ ){if (str[i] == 'F'){if (str[i - 1] == 'B') str[i] = 'E';else str[i] = 'B';}if (i > l && str[i] == str[i - 1]) low ++ ;}str = s;for (int i = l; i <= r; i ++ ){if (str[i] == 'F') str[i] = str[i - 1];if (i > l && str[i] == str[i - 1]) high ++ ;}int ends = l + n - 1 - r, d = 2;if (ends) high += ends, d = 1;cout << (high - low) / d + 1 << endl;for (int i = low; i <= high; i += d)cout << i << endl;}return 0;
}

这是完全根据题解写的代码,其实其中一种思路,大家可以参考一下,也可以自己按照思路写代码,如果看不懂的话可以在评论区指出或者私信博主

对大家有帮助的话不要吝啬手里的点赞关注呀,以后每天博主都会带来优质内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是网络服务器?

WEB简介 WEB服务器也称为WWW(WORLD WIDE WEB)服务器&#xff0c;主要功能是提供网上信息浏览服务。 WWW 是 Internet 的多媒体信息查询工具&#xff0c;是 Internet 上近年才发展起来的服务&#xff0c;也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具&#xff0c;才…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结&#xff1a;当子类重写了父类方法A&#xff0c;父类方法直接调用被重写的父类方法后&#xff0c;调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

在线负公差测径仪 生产场景智能化

在线负公差测径仪是专为负公差轧制而研发的精密仪器&#xff0c;除检测的外径尺寸外&#xff0c;还能对负公差信息进行展示。让操作工对生产更加得心应手。 负公差测径仪同样采用八轴测头进行非接触式的在线检测&#xff0c;以实现全方位的尺寸检测&#xff0c;并将截面图实时展…

【WPF.NET开发】WPF中的焦点

本文内容 键盘焦点逻辑焦点键盘导航以编程方式导航焦点焦点事件 在 WPF 中&#xff0c;有两个与焦点有关的主要概念&#xff1a;键盘焦点和逻辑焦点。 键盘焦点指接收键盘输入的元素&#xff0c;而逻辑焦点指焦点范围中具有焦点的元素。 本概述详细介绍了这些概念。 对于创建…

申请域名SSL证书并自动推送至阿里云 CDN

近期国外SSL证书厂商调整了免费证书的续签规则&#xff0c;一年期的证书全部取消&#xff0c;现在只能申请90天有效期的免费证书。普通web站点可以通过宝塔面板或部署acme.sh等证书自动管理工具来实现自动化申请和部署&#xff0c;但是阿里云之类的CDN服务就只能通过手动或Open…

初步认识API安全

一、认识API 1. 什么是API API(应用程序接口)&#xff1a;是一种软件中介&#xff0c;它允许两个不相关的应用程序相互通信。它就像一座桥梁&#xff0c;从一个程序接收请求或消息&#xff0c;然后将其传递给另一个程序&#xff0c;翻译消息并根据 API 的程序设计执行协议。A…

Hystrix相关面试题及答案(2024)

1、什么是Hystrix&#xff0c;它是如何工作的&#xff1f; Hystrix是一个由Netflix开源的库&#xff0c;主要用于在分布式系统中提供延迟和容错功能&#xff0c;通过阻止服务故障的蔓延和提供回退机制来保护系统。它在服务架构中扮演着重要的角色&#xff0c;特别是在微服务架…

利用阿里云的尖端数据库解决方案增强游戏数据管理

在快节奏和动态的游戏世界中&#xff0c;对于努力为玩家提供无缝体验的公司来说&#xff0c;管理大量数据是一项关键挑战。阿里云是亚太地区的主要参与者&#xff0c;也是全球公认的运营数据库管理系统领导者&#xff0c;提供量身定制的创新解决方案&#xff0c;以应对游戏公司…

C# 全屏label控件实现的贪吃蛇。

C# 全屏label控件实现的贪吃蛇。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using stat…

T527 配置edp配置pwm不正常引起的背光不亮问题

前言 T527 主板在调试edp点屏的时候&#xff0c;配置了一个pwm8对应的引脚作为背光&#xff0c;这个pwm8默认在dts中是没有配置的&#xff0c;需要添加对应的pin脚配置&#xff0c;于是参考了其他pwm的配置&#xff0c;添加到了dts。但是开机后edp屏的背光就是不亮&#xff0c…

案例074:基于微信小程序的儿童预防接种预约管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

信息学奥赛一本通2035:【例5.2】平移数据

2035&#xff1a;【例5.2】平移数据 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 55733 通过数: 36735 【题目描述】 将aa数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。 【输入】 第一行为数组aa的元素个数&#xff1b; 第二行为nn个小于10001…

vue中provide和inject使用的注意事项

在Vue.js中&#xff0c;provide 和 inject 是用于父组件向子组件传递数据的高级选项。它们通常用于跨层级组件之间的通信&#xff0c;而不需要通过中间组件进行 props 或事件的传递。 provide 选项&#xff1a; provide 选项用于在父组件中声明需要传递给后代组件的数据。 /…

uniCloud 的 schema2code 【实用教程】

schema2code 用于通过 schema 文件&#xff0c;自动生成对表进行增删改查的操作页面。 以 uniCloud-aliyun/database/todo.schema.json 为例 {"bsonType": "object","required": [],"permission": {"read": true,"cr…

Halcon区域的面积和中心点area_center

Halcon区域的面积和中心点 提到区域的特征&#xff0c;最常用的莫过于区域的面积和中心点坐标信息。实际工作中&#xff0c;经常会使用面积或中心点进行特征的选择和定位。Halcon中的area_center算子就是用于实现这一功能的&#xff0c;该算子一次返回以下两个结果。 &#xf…

Vue3-33-路由-路由的别名配置 alias

别名的作用 路由中的别名配置&#xff0c;可以实现 多个路径 对应 同一个路由。 例如 &#xff1a; 路由的路径是 /a; 配置别名为 &#xff1a; /a2; 则 访问 /a 或 /a2 的时候&#xff0c;都可以访问到 同一个组件。 别名的特点 关键字 &#xff1a; alias 当通过别名进行路由…

认识CUDA

CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xff0c;是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构&#xff08;ISA&#xff09;以及…

抽奖的问题

import randomlucky_num [] # 存放中奖人名单&#xff0c;避免多次中奖 lucky_count 0 # 表示每一种奖品人数够了for time in range(0, 3): # 抽三次奖lucky_count 0 # 每次刷新print(f第一次抽奖现在开始&#xff0c;这次抽的是{3-time}等奖\n)# 判断奖品是哪个if time…

金和OA c6 uploadfileeditorsave接口存在任意文件上传漏洞

产品简介 金和网络是专业信息化服务商&#xff0c;为城市监管部门提供了互联网监管解决方案&#xff0c;为企事业单位提供组织协同OA系统升开发平台&#xff0c;电子政务一体化平台智慧电商平合等服务 漏洞概述 金和-c6 uploadfileeditorsave 任意文件上传&#xff0c;攻击者…

线程的基础

文章目录 线程的介绍&#xff1a;创建线程的三种方式&#xff1a;一、继承Thread二、实现Runnable接口三、实现Callable接口 线程的优先级&#xff1a;多线程&#xff1a;线程终止&#xff1a;线程常用方法&#xff1a;用户线程和守护线程线程的生命周期&#xff1a;Synchroniz…