解题思路
长度为 n 的 r 进制回文数由前半段唯一确定,按编号直接构造即可,不必枚举。
- 设前半段长度 h=⌊(n+1)/2⌋。n 为奇数时,最中间那一位也算在前半段里。
- 最高位只能取 1,2,…,r−1,其余 h−1 位每位可取 0,1,…,r−1。把这些回文数从小到大排好,第 t 个就对应把 t−1 按这种混合进制拆开。
- 令 x=t−1。从右往左,前半段的低 h−1 位依次取 xmodr,再令 x←⌊x/r⌋;最后最高位为 x+1。
- 把前半段左右对称抄到长度为 n 的数组 digits 上,得到完整的 r 进制表示。
- 用霍纳法则把 digits 转成十进制:val←val⋅r+digits[i]。答案可能超过 32 位整数,需使用 64 位。
题目内容
一个数如果正着读和倒着读完全一样,就称它是回文数。例如十进制里的 1221、3443 都是回文数。
下面几条需要同时满足:
- 回文数按从小到大编号,编号从 1 开始
- 最高位不能为 0,也就是没有前导零
- 这里的长度指该数在 r 进制下的位数
现在给出进制 r、位数 n 以及编号 t,请找出长度为 n 的 r 进制回文数中的第 t 个,并输出它对应的十进制值。保证这个数存在。
约束条件
- 2≤r≤16
- 1≤n≤60
- 1≤t≤9×108
- 输出结果不超过 1018
输入描述
一行三个整数 r、n、t,彼此用空格分开。
输出描述
输出一个整数,即第 t 个长度为 n 的 r 进制回文数的十进制值。
样例1
输入
4 3 3
输出
25
说明
四进制下长度为 3 的回文数依次为 101 (17),111 (21),121 (25),131 (29),202 (34),212 (38)。第 3 个是 121,十进制为 25。
样例2
输入
5 2 4
输出
24
说明
五进制下长度为 2 的回文数依次为 11 (6),22 (12),33 (18),44 (24)。第 4 个是 44,十进制为 24。
样例3
输入
2 7 3
输出
85
说明
二进制下长度为 7 的回文数依次为 1000001 (65),1001001 (73),1010101 (85),1011101 (93)。第 3 个是 1010101,十进制为 85。