sicily 1544 Integer Generator

来源:互联网 发布:ecshop的app源码 编辑:程序博客网 时间:2024/06/05 09:13
数位

题意:
给你一个数位系统(0到9),然后给你一个数串.判断其是否合法(含有数位系统没有的字符即是不合法,或者有前导0).
如果合法的话,输出其这个数串在这个数位系统的下一个数串

数据范围:
数位系统size<=10
数串长度未知

思路:

判断合不合法很容易,关键是这个下一个子串是怎么理解.

样例给了很多提示,数位系统是1,数串是1.那答案是11.如果按一进制去理解,1和11应该是同一个东西

还有,数位系统是987654321,数串是999,下一个居然是1000,而不是998,也就是说数位系统每个字符的权值是按照1到9这样.所以我们应该这样理解,数串在数位系统的排列,是以长度为第一关键字,以字典序为第二关键.并且如果数位系统含有0,那么长度要变长的时候,将添加次小的字符,像999变成1000.(如果数位系统只有0怎么办,这样的话数串肯定是不合法,要么有前导0,要么有数位系统没有的字符,到这里才明白这题为什么要这样出)

算法过程可以这样.先对数位系统从新排序,然后从后往前扫数串,如果发现不是最大的字符的话,就把它变成当前字符的下一个字符,然后后面的全部置为最小的字符.如果找不到,那么全部的字符也变成最小的字符,然后在前面添加一个最小的字符,如果最小的字符是0,那么添加次小的字符

总结:从后往前扫,把最大字符的为置为最小字符,出现非最大字符则+1,退出循环.全部为最大则在最前面添加一个最小非零的字符


0 0