2341: 教主的难题

内存限制:256 MB 时间限制:2.000 S
评测方式:文本比较 命题人:
提交:2 解决:1

题目描述

  一个数x可以按以下规则生成数字:

  1、将任意两位交换,若交换的数字为ab,生成的代价为((a and b)+(a xor b))*2

  例如134可以生成431,因为431可以从134的个位(4)与百位(1)交换后得到,代价为((1 and 4)+(1 xor 4))*2=10

  2、将其中一位数删除,但是删除的数要满足大等于它左边的数,且小等于它右边的数,并且定义最高位左边的数为个位,个位右边的数为最高位。若删除的数字为a,它左边的数为b,它右边的数为c,则生成的代价为a+(b and c)+(b xor c)

  例如212,可以删除百位的2得到12,或删除个位的数得到21,但是因为2>1,所以1是不能被删除的。特别地,若x为两位数,它能删除当且仅当x的两位数相同,若x为一位数,它是不能被删除的。

3、在两位数字之间,也可以是数字的前面或后面加入一位数,同样地,加入的数要满足大等于它左边的数,且小等于它右边的数,并且定义最高位左边的数为个位,个位右边的数为最高位。若加入的数字为a,它左边的数为b,它右边的数为c,则生成的代价为a+(b and c)+(b xor c)

  例如241,它可以在24之间加入一个3,生成2341,也可以在数的末尾加入一个1或者2,当然还有其它可以生成的数,但是不能在41之间加入数字。

 

  你的任务是,从n个数n开始,每次用n与生成的数生成若干个(不一定是1个,也不一定是全部,当然也可以不生成)满足生成规则的数,生成完这个数不会消失。生成的数的位数不能大于n的位数。在生成的不同的数最多的情况下,代价最小是多少。

输入

输入仅包括一个正整数n,为一开始的数。

输出

输出包括一个正整数,为最小代价。

样例输入 复制

111

样例输出 复制

4

提示

【样例说明】

111删除1得到11,代价为211删除1得到1,代价为2,总代价2+2=4111无法生成1111因为n=111为一个3位数,而1111为一个4位数。

利用交换/添加规则无法得到更多不同的数,所以最小代价为2+2=4

 

【数据规模】

对于20%的数据,有n100

对于40%的数据,有n1000

对于60%的数据,有n10000

 

对于100%的数据,有n100000,保证n的任何一位不包含0