题解 CF554A 【Kyoya and Photobooks】

Mars_Dingdang

2020-10-04 18:07:00

Solution

这题还没有 python 题解?我来啦 qaq。 ## 题目大意 有一个字符串,仅有小写字母构成,给这个字符串加一个小写字母,可以加在开头或者结尾或者中间任何位置,加完后,变成新的字符串。新加一个字母,可以变成的新字符串有多少种? 【举例说明】:比如原先字符串 `a`,新加一个小写字母后可以为:`aa`, `ab`, `ba`, `ac`, `ca` 直到 `az`, `za`,一共 $51$ 种,注意 `aa` 只算一次。 ## 大体思路 我们可以形象地理解为:有一些木板,总共 $len$ 块,将空间隔出了 $len+1$ 个。现在,每个空间中都可以放 $26$ 个字母中的一个,因此一共有 $26(len+1)$ 种方法。 ![](https://cdn.luogu.com.cn/upload/image_hosting/uku6k2oy.png) 但与此同时,也需要排除重复的方法:在第 $i$ 个字母左边或右边放一个与其相同的字母,所得的结果是一样的。由于一共有 $len$ 个字母,因此在左边有 $1\times len$ 种;同理右边也有 $1\times len$ 种。也就是说,最终的答案要从 $26(len+1)$ 中减去 $len$ 。 ![](https://cdn.luogu.com.cn/upload/image_hosting/uoczbaxs.png) ## 完整代码 c++ 的代码楼上几位大佬已经有了,因此我就不放了。Python 代码如下(请勿抄袭): ```python s=input()#默认输入为字符串 a=len(s)#长度,注意变量不能和 len 重名 print(26*(len+1)-len) 按规律输出 ``` (事实证明 python 确实慢一点。) ### 后记 python 使用介绍: - `len()` 函数类似于 c++ 中的 `strlen()` 或 `s.size()`,返回字符串的有效长度。 - `input()` 输入函数,自动将格式置为字符串类型。如需更改需要强制类型转换。 - `find()` 函数:如果找到返回子串所在位置的最左端索引,如果未找到返回 $-1$。 详见 @LucasXu80 大佬的 [博客](https://www.luogu.com.cn/blog/HuayuLucas/python-kuai-su-shang-shou)。