跳转至

NOIP2012普及组初赛 阅读程序 第4题《字符串》

Keywords: 字符串,字典序

img

img

img

img

好,拿到这道题,我感觉还是有些难度的,一下子没看出来结果,所以,看明白main函数和get()的作用。

main(),读入字符串,双指针算法,循环遍历,用ans来记录一个值。最后,从头到尾遍历一遍

get(),返回字符串里的字符,当i小于n,输出i的位置,否则取模

基本函数的含义理解里,那么,我们开始用<画表大法>

img

我们得到ans = 7,

然后

for (j = 0; i <= n - 1; j++) cout << get(ans +j);

也就是从s[7]开始输出字符,结果是ACBBADAD

回过头来,再分析一下刚才的if条件语句

get(i + j) < get(ans + j)

i 和 ans的值固定,j每一次都从0开始遍历 换句话说,就是一个从i位置往后遍历,一个从ans位置往后遍历。然后,发现从i开始遍历的字符较小,就更新ans = i(打擂台)。

那么,

就是以每一个字符为起点的新的字符串,谁的字典序相对较小,就把这个字符串输出出来。