检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
#题面
#题目描述
Mark Douglas 是一名律师。他的客户 Yuri Ball 在一场车祸中不幸去世。为了帮助 Yuri 的亲属拿到他的遗产,Mark 需要得到一个密码。在 Yuri 的笔记本上,有一个长为 的只包含小写字母的字符串,Mark 知道密码恰好是将这个字符串分解为两个长度为 的子序列且它们构成的字符串恰好相反的方案数。我们认为两种分解方法是不同的,当且仅当两个下标集合构成的集合 是不同的,注意 和 我们认为是相同的分解方法。如 cabaacba 的合法分解共有 cabaacba 和 cabaacba 两种。Mark 希望你能帮助他计算出密码,事成之后他决定分给你 six million five hundred thousand dollars 并邀请你去柬埔寨度假。
#输入格式
第一行为一个正整数 。
第二行为一个长度为 的字符串,仅包含小写字母。
#输出格式
输出一行表示答案。
#输入输出样例
样例输入 #1
4
cabaacba
样例输出 #1
2
#数据范围与约定
测试点编号 | 约束 |
---|---|
字符串中仅有小写字母 a | |
字符串中除去两个 b 外其余全是 a | |
字符串中仅有 a 、b 两种字符 | |
无 |
对于 的测试数据,。
#思路
折半搜索。
我们将字符串分为前后两部分。如果前半部分中搜得的前缀串为 ,那么后半部分中搜得的后缀串必须为 ,且为有序对。对于两侧分别枚举每个字符的归属情况,使用 std::unordered_map
计数即可。
#代码
1 |
|