题解 CF554A 【Kyoya and Photobooks】
Mars_Dingdang
2020-10-04 18:07:00
这题还没有 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)。