通过这一道题目希望大家能够知道:我们归根结底还是一个正经算法竞赛。
本题来源于《中国式家长》中的一个小游戏。
游戏开始时会生成一个长度为
蒜斜可以进行若干轮操作,每轮操作的流程如下:
- 选择结束游戏,当只剩下一个宝石的时候,蒜斜必须结束游戏。
- 选择并删除某一个当前还存在的宝石,删除后右侧的宝石会自动向左补齐。
- 令
为当前最小的下标满足从左到右第 个宝石的类型和能量都相同。如果这样的 不存在,则这一轮结束,开始下一轮。否则这三个宝石会被移出游戏,同时在原来第 个宝石的位置会出现一个类型和原来相同,能量比原来大 的宝石。接着右侧的宝石会向左补齐,游戏回到这一步的开始,并继续从左到右寻找连续三个相同的宝石。
我们用
- 如果宝石序列是 A(1)A(1)B(1)A(1)A(1),那么在删除 B(1) 之后,结果序列为A(2)A(1)。
- 如果宝石序列是 A(3)A(3)A(2)A(2)A(1)A(1)B(1)A(1),那么在删除 B(1) 之后,结果序列为 A(4)。
蒜斜是一个全收集爱好者。她发现每一次开始这个小游戏,初始的宝石的数量、顺序和颜色都是完全相同的。而游戏中有一个传说级成就:合成出所有可能的结束状态。
在开始刷成就之前,蒜斜想让你帮她计算一下,一共有多少种不同的结束状态。
两个结束状态是不同的当且仅当剩下宝石的数量不同,或者存在一个下标
输入格式
第一行一个整数
第二行一个长度为
输出格式
输出一行一个整数,表示可能的结束状态个数。答案可能很大,对
样例输入一
input
5 AABAA
output
13
explanation
没有删除 B(1) 的情况(共 9 种):A(1)A(1)B(1)A(1)A(1), A(1)A(1)B(1)A(1), A(1)A(1)B(1), A(1)B(1)A(1)A(1), A(1)B(1)A(1), A(1)B(1), B(1)A(1)A(1), B(1)A(1), B(1)
。
删除了 B(1) 的情况(共 4 种):A(2)A(1), A(2), A(1)A(1), A(1)
。
因此一共有 13 种可能的结束状态。
样例输入二
input
16 ABCDABCDABCDABCD
output
42775
样例输入三
input
16 DAABBAACCBBAACCD
output
6314
限制与约定
Small Task: 初始序列相邻球颜色不同。
Large Task: 无特殊限制。
时间限制:
空间限制: