4993.FEB【无标题】贪心和分类讨论数学推导

有一个长度为 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≤N≤2×1051≤≤2×105
输入样例1:
4
BEEF
输出样例1:
2
1
2
输入样例2:
9
FEBFEBFEB
输出样例2:
2
2
3
输入样例3:
10
BFFFFFEBFE
输出样例3:
3
2
4
6

 

Awcing1

  • 先分析每一段连续x的价值有哪些
  • 再分析所以段的价值之和

关键点是将整个字符串给他分成几段来分析,一共有哪些情况?分两种情况,

1.情况特判整个字符串都需要改变

2.用一个L和r找到第一个不是F的位置进行判断,为中间部分,然后进行位置处理;

由证明,可中间部分只有可能有两种情况公差均为2,

如果说左右两边除中间以外,有F的话,那公差就会变为1

f18d5bfabae04ff48f52b9b85e7d9766.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值