Codeforces Round 917 (Div. 2)
1|0基本情况
A题秒了,B题卡了一年。
2|0B. Erase First or Second Letter
2|1卡题分析
两方面原因
- 没有变通,一开始的思路是公式算出总字串数再想办法找重复的减掉,但搞了一个小时都不可行,应该早点换成正着来找的思路。
- 没有更深入的分析样例。
最后虽然出来了,但是 +6,而且也不如正解。
2|2正解思路
第一种思路
从第四个样例入手:
第一种操作不好直接入手考虑,直接先考虑第二种。
- 对于第一个 b
- 可以删 c cd cda cdaa...共
种,加上自己本身就有 种字串。 - 删除 b。
- 可以删 c cd cda cdaa...共
- 对于第一个 c
- 可以删 d da daa daaa等共
种,加上自己本身就有 种字串。 - 删除
- 可以删 d da daa daaa等共
- 对于第一个 d
- 总共有
种字串。 - 删除
- 总共有
- 对于第一个
- 总共有
种字串。 - 删除
- 总共有
注意
此时
那么后面全是重复的,属于是从结果反过来推思路。
考虑为什么重复,因为之前出现一次的字母,其构成的子串就一定包含了后面再次出现的子串(不严谨的证明,但是这方法就是对的)。
代码实现
2|3第二种思路
考虑两种操作
-
如果只有操作二那就是留下第一个字母加任意一个后缀。
-
如果只有操作一那就是删去任意一个前缀,当然留下一个后缀。
推导
一定会有个后缀留下来,就枚举这个后缀是哪个。
然后这个后缀前面的位置,根据操作二还可以选一个字母。
那就记录一下不同字母个数,就是每一个后缀能贡献的个数了。
把每个后缀的贡献加起来就是答案。
代码实现
__EOF__

本文作者:Kdlyh
本文链接:https://www.cnblogs.com/kdlyh/p/17925572.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kdlyh/p/17925572.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下