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,一经查实,立即删除!

相关文章

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

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

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

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

使用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文件中有两种依赖关系 …

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

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

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

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

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

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

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;应用成…

【python】基础知识类的语法功能讲解

Python代码定义了一个名为Calculation的类&#xff0c;用于执行基础的数学运算&#xff08;加法、减法、乘法、除法和取模&#xff09;。下面我将详细解释各个部分的功能&#xff0c;并以列表形式总结&#xff1a; 类定义&#xff1a; class Calculation: 定义了一个名为Cal…

CMake在静态库中链接动态库

hehedalinux:~/Linux/multi-v3$ tree . ├── calc │ ├── add.cpp │ ├── CMakeLists.txt │ ├── div.cpp │ ├── mult.cpp │ └── sub.cpp ├── CMakeLists.txt ├── include │ ├── calc.h │ └── sort.h ├── sort │ ├── …

SpringBoot项目里用MultipartFile作为入参获取到的file为什么null

前言&#xff1a; 最近在项目中用到了Excel模板导入功能&#xff0c;但是在测试阶段用Postman测试时&#xff0c;通过Post请求&#xff0c;传到后端的File一直为null。其中前端传参和请求都没问题&#xff0c;后端的接参也没问题&#xff0c;问题出在过滤器的复用上。 问题场…

外包干了5个月,感觉技术退步明显......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四…

Spring Security入门

目录 1.简介 与shiro对比 添加依赖 执行流程 2.UserDetailsService User实现类 3.PasswordEncoder BCryptPasswordEncoder 4.自定义登录逻辑 5.自定义登录界面 6.设置请求账户和密码的参数 7.自定义登陆处理器 成功 失败 8.判断 权限判断 角色判断 …

navicat for oracle

前言 Oracle中的概念并不是创建数据库&#xff0c;而是创建一个表空间&#xff0c;然后再创建一个用户&#xff0c;设置该用户的默认表空间为我们新创建的表空间&#xff0c;这些操作之后&#xff0c;便和你之前用过的mysql数据库创建完数据库一模一样了。 创建数据库 使用O…