刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

最小下标

小蓝有一个由大写字母ABCDEF组成的字符串S,长度为n,字符串的下标依次为0到n-1。

小蓝按照如下方法生成一个无限长的字符串:

首先选定一个0到n-1之间的数,作为初始下标。

从初始下标开始,将下标对应的字符加入到字符串的结尾,将字符的序号(A到F依次对应1到6)与下标相加作为新的下标值,如果下标大于等于n,将其对n求余。重复此过程,即得到无限长的字符串。例如,对于字符串ACDF,当初始下标是0时,生成的字符串为:ACACACACAC...

再如,对于字符串DCBA,当初始下标是1时,生成的字符串为:CDDDDDDDDD.…

给定小蓝的字符串S,请问当初始下标为多少时,生成的字符串最小。

输入格式

输入一行包含一个字符串。

输出格式

输出一行,包含一个整数,为所求的下标,如果有多个下标满足要求,输出最小的那个。


样例输入1

DCBA

样例输出1

3

样例输入2

AAAA

样例输出2

0

评测用例规模与约定

令|S|表示S的长度。

对于30%的评测用例,1<=|S|<=100。

对于50%的评测用例,1<=|S|<=1000。

对于70%的评测用例,1<=|S|<=10000。

对于80%的评测用例,1<=|S|<=100000。

对于所有评测用例,1<=|S|<=1000000。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```pythonn = len(input())min_index = 0min_str = ""for i in range(n):str_i = ""index = iwhile True:str_i += chr(ord('A') + index % 6)index = index // 6if index >= n:index %= nif not str_i or str_i[0] > min_str[0]:breakif not str_i or str_i[0] < min_str[0]:min_str = str_imin_index = iprint(min_index)```

解析:

【喵呜刷题小喵解析】:

本题要求找到初始下标,使得生成的字符串最小。我们可以尝试所有可能的初始下标,然后生成对应的字符串,并比较这些字符串的大小。

具体做法如下:

1. 读取输入的字符串S,并获取其长度n。
2. 初始化最小下标min_index为0,最小字符串min_str为一个空字符串。
3. 遍历所有可能的初始下标i,对于每个下标i,执行以下步骤:
* 初始化字符串str_i为一个空字符串。
* 初始化下标index为i。
* 进入一个循环,每次循环执行以下步骤:
+ 将index对应的字符(即字母A到F)加入到str_i的末尾。
+ 将index除以6取整数部分作为新的index。
+ 如果index大于等于n,将其对n取余。
+ 如果str_i为空或者str_i的第一个字符比min_str的第一个字符小,跳出循环。
* 如果str_i为空或者str_i的第一个字符比min_str的第一个字符小,更新min_str和min_index。
4. 输出min_index。

在上面的算法中,我们利用了字符串的比较规则,即字典序小的字符串更小。通过不断生成字符串并比较,我们可以找到最小的字符串,从而确定最小的初始下标。

注意:在生成字符串时,我们使用了字符的ASCII码值进行计算,即字母A到F的ASCII码值分别为65到70。我们通过ord函数获取字符的ASCII码值,通过chr函数将ASCII码值转换为字符。
创作类型:
原创

本文链接:最小下标 小蓝有一个由大写字母ABCDEF组成的字符串S,长度为n,字符串的下标依次为0到n-1。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share