1335B - Construct the String

发布时间 2023-09-02 21:28:47作者: 是吃可爱长大的

B. Construct the String

https://codeforces.com/problemset/problem/1335/B

分析:

首先不要被他的示例迷惑掉,这个问题可以看作若干个小问题
Q:

  1. 如何简单的构造a个长度里有b个不同的值
  2. 如何是n里的所有子串都满足条件

A:

  1. 首先可以把1看作是a,以此类推。如果假设3里面有2个不同的值的话,那么可以遍历3来,普通遍历的话就是1、2、3,有3个不同的值。所以我们应该修改哪个值呢?因为这是一个子问题,如果是100里面只有两个不同的值的话我们又该如何下手呢?或者换句话来说,我们只需要一直反复在3的范围里打印两个不同的值,像是121212这样,这不就是取余操作吗,0 % 2 = 0;1 % 2 = 1;2 % 2 = 0,所以可以用a对b取余来达到目的
  2. 如果我们有一个无穷的递增数列,那么我们随意抽其中的一个子数列肯定也是递增的对吧。如果我们有一个无限在3个值循环的数列,我们不管从什么地方抽,又或者是抽几个,那么首先子数列肯定是循环的对吧,并且它不会出现第4个值。这不就好办了,只要我们让n满足b个值一直循环,不管我们怎么取长度,他都是循环的,假设b是3,我们可以取到abca、bcab、abcabc、bcabca这样的子串,正好满足题目所有条件
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)