有一个长度为 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