1335B - Construct the String
B. Construct the String
https://codeforces.com/problemset/problem/1335/B
分析:
首先不要被他的示例迷惑掉,这个问题可以看作若干个小问题
Q:
- 如何简单的构造a个长度里有b个不同的值
- 如何是n里的所有子串都满足条件
A:
- 首先可以把1看作是a,以此类推。如果假设3里面有2个不同的值的话,那么可以遍历3来,普通遍历的话就是1、2、3,有3个不同的值。所以我们应该修改哪个值呢?因为这是一个子问题,如果是100里面只有两个不同的值的话我们又该如何下手呢?或者换句话来说,我们只需要一直反复在3的范围里打印两个不同的值,像是121212这样,这不就是取余操作吗,0 % 2 = 0;1 % 2 = 1;2 % 2 = 0,所以可以用a对b取余来达到目的
- 如果我们有一个无穷的递增数列,那么我们随意抽其中的一个子数列肯定也是递增的对吧。如果我们有一个无限在3个值循环的数列,我们不管从什么地方抽,又或者是抽几个,那么首先子数列肯定是循环的对吧,并且它不会出现第4个值。这不就好办了,只要我们让n满足b个值一直循环,不管我们怎么取长度,他都是循环的,假设b是3,我们可以取到abca、bcab、abcabc、bcabca这样的子串,正好满足题目所有条件
# open(0)是获取标准输入,win: ctrl + Z + enter, pycharm: ctrl + D + enter
# <_io.TextIOWrapper name=0 mode='r' encoding='cp936'>
# 我们使用*来进行解包,放进list里(列表推导式),然后使用数组切片把第一行去掉
for s in [*open(0)][1:]:
ans = ""
n, a, b = map(int, s.split())
for i in range(n):
ans += chr(97 + i % b)
print(ans)