FEB(acwing)

文章目录

  • FEB
    • 题目描述
    • 输入格式
    • 输出格式
    • 数据范围
    • 输入样例1:
    • 输出样例1:
    • 输入样例2:
    • 输出样例2:
    • 输入样例3:
    • 输出样例3:
    • 代码
    • 题解
      • 情况1:xxxxxx:0,1,2,…,k-1
      • 情况2:0xxxxxx:0,1,2,…,k
      • 情况3:0xxxxxx0:k+1,k-1,k-3,k-5,…![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cdfbd79c2aa94162a656c5f81a768158.png)
        • 讨论中间的值能否都取到:
      • 情况4:k,k-2,k-4,…
      • 等差数列的合并
        • 中间(情况3、4)的等差数列(公差为2)的合并
      • 边(情况2)与边(情况2)的等差数列(公差为1)合并
        • 边(情况2:公差为1)和中间(情况3,4:公差为2)的等差数列合并

FEB

题目描述

有一个长度为 N的字符串 S,其中的每个字符要么是 B,要么是 E。
我们规定 S的价值等于其中包含的子串 BB 以及子串 EE 的数量之和。
例如,BBBEEE 中包含 2个 BB 以及 2个 EE,所以 BBBEEE 的价值等于 4。
我们想要计算 S的价值,不幸的是,在我们得到 S之前,约翰将其中的一些字符改为了 F。
目前,我们只能看到改动后的字符串 S,对于其中的每个 F,我们并不清楚它之前是 B 还是 E。
请你计算,改动前的 S有多少种可能的价值并将所有可能价值全部输出。

输入格式

第一行包含一个整数 N。
第二行包含改动后的字符串 S。

输出格式

第一行输出一个整数 K,表示改动前的 S的可能价值的数量。
接下来 K 行,按照升序顺序,每行输出一个可能价值。

数据范围

1≤N≤2×105

输入样例1:

4
BEEF

输出样例1:

2
1
2

输入样例2:

9
FEBFEBFEB

输出样例2:

2
2
3

输入样例3:

10
BFFFFFEBFE

输出样例3:

3
2
4
6

代码

#include<bits/stdc++.h> 
using namespace std;int n; // 声明一个整型变量n来存储字符串的长度
string s; // 声明一个字符串变量s来存储输入的字符串int main() {cin >> n >> s; // 从标准输入读取字符串的长度n和字符串s// 情况一:如果字符串s完全由字符'F'组成if(s == string(n, 'F')) {cout << n << endl; // 输出n,可能的价值数量为字符串长度for(int i = 0; i < n; i++)cout << i << endl; // 按顺序输出从0到n-1的整数}else {int l = 0, r = n - 1;// 跳过字符串s左边的'F'字符while(s[l] == 'F') l++;// 跳过字符串s右边的'F'字符while(s[r] == 'F') r--;int min = 0, max = 0; // 初始化最小和最大价值为0auto str = s;// 估算最小价值for(int i = l; i <= r; i++) {if(str[i] == 'F') {// 如果F的前一个字符是B,则假设F是E,反之亦然if(str[i - 1] == 'B') str[i] = 'E';else str[i] = 'B';}// 计算相邻字符相同的情况,增加最小价值if(i > l && str[i] == str[i - 1]) min++;}str = s;// 估算最大价值for(int i = l; i <= r; i++) {// 将F替换为它前面的字符(B或E)if(str[i] == 'F') str[i] = str[i - 1];// 计算相邻字符相同的情况,增加最大价值if(i > l && str[i] == str[i - 1]) max++;}//计算左右两边的最大价值 //左边:0~l-1,共l-1-0+1=l个数,例:0~4-1,0,1,2,3共4个数,4-1+1 //右边:r+1~n-1 共n-1-(r+1)+1=n-1-r个数 int ends = l + n - 1 - r, d = 2;// 调整最大价值,并确定输出价值的间隔if(ends) max += ends, d = 1;//如果ends不为0,说明公差为1和公差为1的等差数列合并,公差为1,反之,ends为0,说明两边没有F段,公差为2//并求总等差数列的最大值,最小值不变,因为两边的等差数列最小值=0 cout << (max - min) / d + 1 << endl; // 输出总的价值数量for(int i = min; i <= max; i += d) cout << i << endl; // 逐个输出每个可能的价值}return 0; 
}

题解

第一步,先分析每一段连续的x的价值有哪些种。
第二步,再分析所有段的价值之和有哪些。

k在下面表示x的数量

情况1:xxxxxx:0,1,2,…,k-1

在这里插入图片描述

情况2:0xxxxxx:0,1,2,…,k

在这里插入图片描述

情况3:0xxxxxx0:k+1,k-1,k-3,k-5,…在这里插入图片描述

最大值:k+1
最小值:

  • k为偶数:min=1
  • k为奇数,min=0
讨论中间的值能否都取到:

任何一个方案都可以通过全0的方案变换过来
全0的方案,最大值为k+1
变了中间任意一个数(每改变一位),在原有的基础上±两个1,k+1±1±1
新价值=原价值±1±1,奇偶性一样
所以,所有的情况是:k+1,k-1,k-3,k-5,…
如果k=5,max=6,6-2=4,4-2=2,2-2=0;
在这里插入图片描述

情况4:k,k-2,k-4,…

在这里插入图片描述
最大值:k
最小值:

  • k为偶数:0
  • k为奇数:1

等差数列的合并

中间(情况3、4)的等差数列(公差为2)的合并

合并两个公差为2的等差数列,仍然会得到一个公差为2的等差数列,最小值为两个等差数列最小值相加,最大值为两个等差数列最大值相加,中间所有公差为2的数都取得到。
在这里插入图片描述
总价值数量为(17-5)/2+1=7
总价值数量公式:(max-min)/d+1

边(情况2)与边(情况2)的等差数列(公差为1)合并

合并一个公差为1的等差数列,得到一个公差为1的等差数列,最小值为两个等差数列最小值相加,最大值为两个等差数列最大值相加,中间所有公差为1的数都取得到。

边(情况2:公差为1)和中间(情况3,4:公差为2)的等差数列合并

合并一个公差为2的等差数列和公差为1的等差数列,得到一个公差为1的等差数列,最小值为两个等差数列最小值相加,最大值为两个等差数列最大值相加,中间所有公差为1的数都取得到。
在这里插入图片描述
总价值数量为(15-7)/1+1=9
总价值数量公式:(max-min)/d+1

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

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

相关文章

Java获取文件的后缀名称

String fileName "example.txt";String fileExtension fileName.substring(fileName.lastIndexOf(".") 1); 使用lastIndexOf()方法&#xff0c;找到文件名中最后一个点的位置&#xff0c; 然后使用substring()方法&#xff0c;获取点后面的字符串作为文…

AI教我学编程之C#变量及实例演示

前言 在AI教我学编程之AI自刀 这篇文章中&#xff0c;我们知道了变量的基础类型&#xff0c;那么变量在C#中有什么作用呢&#xff1f;我们一起来看看吧&#xff01; 目录 重点先知 变量 变量类型 实例演示 变量声明 实例演示 提出疑问 初始化变量 自动初始化 多变量声明 实…

【深度学习目标检测】十六、基于深度学习的麦穗头系统-含GUI和源码(python,yolov8)

全球麦穗检测是植物表型分析领域的一个挑战&#xff0c;主要目标是检测图像中的小麦麦穗。这种检测在农业领域具有重要意义&#xff0c;可以帮助农民评估作物的健康状况和成熟度。然而&#xff0c;由于小麦麦穗在视觉上具有挑战性&#xff0c;准确检测它们是一项艰巨的任务。 全…

从头开始构建大语言模型(LLM)

了解如何从头开始构建大语言模型&#xff0c;从而创建、训练和调整大语言模型&#xff01;LLMs 在“从头开始构建大语言模型”中&#xff0c;你将了解如何从内到外LLMs工作。在这本富有洞察力的书中&#xff0c;畅销书作家塞巴斯蒂安拉施卡 &#xff08;Sebastian Raschka&…

使用emu8086实现——顺序程序设计

一、实验目的 1. 掌握顺序程序设计方法 2. 掌握汇编语言编程设计方法。 二、实验内容 1.用查表的方法将一位十六进制数转换成它相应的ASCII码。 代码及注释&#xff1a; Data segment ;定义数据段Tab db 30h,31h,32h,33h,34h,35,36h,37h,38h,39h ;定义一个Tab的字节型…

js逆向第20例:猿人学第19题乌拉乌拉乌拉

文章目录 一、前言二、定位关键参数1、JA3/TLS指纹怎么查看2、加密值长度对比三、代码实现四、参考文献一、前言 任务十九:抓取这5页的数字,计算加和并提交结果 此题在以前用python写逆向代码是存在缺陷的,直到今年有个大佬开源了curl_cffi库,并且支持 JA3/TLS 和 http2 指…

npmvue详解

1、npm是node.js的一个软件依赖包管理工具 2、当前目录下面一般会有一个package.json文件 3、npm install 会去按照package.json文件中的依赖去下载依赖包 默认会下载到当前目录中的node_modules文件夹下&#xff0c;-g会进行全局安装 4、package.json文件中有两种依赖关系 …

开发日记(数据库类型、数据库时间戳、java exception)

&#xff08;一&#xff09;数据库类型 mysql中的datetime可以转为postgres的date &#xff08;二&#xff09;数据库时间戳 postgresql使用时间戳获取时分秒时间 1、select current_timestamp 2024-01-12 14:16:31.9333908 2、select current_timestamp(0) //去掉秒后面…

H7303 无电感,线性恒流,低压差,大电流,车灯/台灯 9V 12V 24V 30V

线性恒流芯片是一种用于控制电流的电子元件&#xff0c;通常用于驱动LED等器件。它的工作原理是通过维持输出电流的恒定来保持被驱动器件的亮度或功率稳定。 具体来说&#xff0c;线性恒流芯片会监测输出电流并调整电压以保持恒定的电流流过被驱动器件。以下是其基本工作步骤&…

sklearn快速实现python机器学习算法

sklearn又写作scikit-learn基于python的高效机器学习算法应用&#xff0c;开源机器学习工具包官网&#xff0c;里面有全英的教程和示例工程应用中&#xff0c;自己使用python从头实现一个算法耗时耗力&#xff0c;还难以保证架构清晰、稳定性强基本流程&#xff1a;实例化、fit…

MaxKey 单点登录认证系统——实现登录后自动跳转及分析思路

Maxkey单点登录系统集成业务系统应用之后&#xff0c;登录界面登录之后不会自动跳转业务系统&#xff0c;需要在首页点击相应应用之后&#xff0c;才能实现跳转业务系统&#xff0c;故以下本人提供解决方法和分析思路。 环境配置 本例使用的是CAS协议实现单点登录 Maxkey 服务…

企业如何做到安全又极速的分发传输大文件

在当代企业运营中&#xff0c;文件的传输和分发是至关重要的任务。然而&#xff0c;随着文件体积的增大和信息敏感性的凸显&#xff0c;企业需要找到一种既安全又能够高效传输大文件的方法。本文将深入探讨如何在企业环境中实现安全又高效的大文件传输。 一、分发大文件时需要注…

JavaScript-jQuery2-笔记

1.获取元素文本、属性、内部结构、表单中的值 获取标签中所夹的文本内容&#xff1a;text() 获取标签的属性值&#xff1a;prop(属性名) 获取表单元素的内容&#xff1a;如 文本框中的内容 val() 获取元素的内部html结构&#xff1a;html() 2.筛选选择器 筛选选择器&#xff1…

day-08 构造限制重复的字符串

思路 首先统计每个字符的个数&#xff0c;然后从后向前按照题意添加字符 解题方法 从后向前添加字符&#xff1a;1.当前字符个数<repeatLimit,直接添加 2.当前字符个数>repeatLimit,添加repeatLimit个&#xff0c;然后插入一个下一级字符 时间复杂度:O(n) 空间复杂度:…

在CentOS中,对静态HTTP服务的性能监控

在CentOS中&#xff0c;对静态HTTP服务的性能监控和日志管理是确保系统稳定运行和及时发现潜在问题的关键。以下是对这一主题的详细探讨。 性能监控 使用工具监控&#xff1a;top、htop、vmstat、iostat等工具可以用来监控CPU、内存、磁盘I/O等关键性能指标。这些工具可以实时…

【C++】map和set的模拟实现

map和set的模拟实现 插入模拟实现正向迭代器模拟实现插入完整实现map的[ ]接口模拟实现正向迭代器完整代码反向迭代器模拟实现 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 在前面几篇C的博客&#xff0c;讲过了二叉搜索树&#xff0c;AVL树&#xff0c;红黑…

Halcon边缘滤波器edges_image 算子

Halcon边缘滤波器edges_image 算子 基于Sobel滤波器的边缘滤波方法是比较经典的边缘检测方法。除此之外&#xff0c;Halcon也提供了一些新式的边缘滤波器&#xff0c;如edges_image算子。它使用递归实现的滤波器&#xff08;如Deriche、Lanser和Shen&#xff09;检测边缘&…

Android中集成FFmpeg及NDK基础知识

前言 在日常App开发中,难免有些功能是需要借助NDK来完成的,比如现在常见的音视频处理等,今天就以ffmpeg入手,来学习下Android NDK开发的套路. JNI和NDK 很多人并不清除JNI和NDK的概念,经常搞混这两样东西,先来看看它们各自的定义吧. JNI和NDK 很多人并不清除JNI和NDK的概念…

成就动机测试

成就动机测试广泛应用在职业发展领域&#xff0c;如&#xff1a;企业Hr人力资源管理部门&#xff0c;用于评估分析员工的潜能和价值&#xff0c;适用场景有人才招聘&#xff0c;岗位晋升&#xff0c;绩效考评等等。在大学生做职业规划&#xff0c;求职应聘中&#xff0c;应用成…

GPT-4技术报告的解读(二)

OpenAI发布的GPT-4技术报告的关键要点&#xff1a; 1. GPT-4是一个先进的大型多模态模型 GPT-4是OpenAI公司推出的第四代Generative Pretrained Transformer模型&#xff0c;相比于前几代模型&#xff0c;GPT-4在多模态处理能力上有显著提升&#xff0c;不仅限于处理文本信息&…