在线测试本题
问题描述
众所周知,任何一个数 n n n 可以拆分为若干项,这些项是不同的,由 2 2 2 的次幂和 3 3 3 的次幂相乘之和组成,即:
n = ∑ i = 1 m ( 2 a i ⋅ 3 b i ) n = \sum_{i=1}^{m} (2^{a_i} \cdot 3^{b_i}) n=i=1∑m(2ai⋅3bi)
且对于所有 i i i 和 j j j ,满足 2 a i 3 b i ≠ 2 a j 3 b j 2^{a_i}3^{b_i} \neq 2^{a_j}3^{b_j} 2ai3bi=2aj3bj
塔子哥给你这个整数 n n n,希望你能找到这样两个长度为 m m m 的序列 A A A 和 B B B 满足给出的方程( 2 a 1 3 b 1 , 2 a 2 3 b 2 , . . . , 2 a m 3 b m 2^{a_1}3^{b_1},2^{a_2}3^{b_2},...,2^{a_m}3^{b_m} 2a13b1,2a23b2,...,2am3bm),并且按照由大到小的顺序依次输出。
输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 T T T( 1 < T < 100 1 < T < 100 1<T<100),代表数据组数。每组测试数据描述如下:在一行上输入一个整数 n n n( 1 ≤ n ≤ 1 0 9 1 \leq n \leq 10^9 1≤n≤109),代表给定的初始数字。
输出描述
对于每一组测试数据,第一行输出一个整数 m m m( 1 ≤ m < 1 0 9 1 \leq m < 10^9 1≤m<109),代表序列的项数。第二行输出 m m m 个不同的整数 2 a 1 3 b 1 , 2 a 2 3 b 2 , . . . , 2 a m 3 b m 2^{a_1}3^{b_1},2^{a_2}3^{b_2},...,2^{a_m}3^{b_m} 2a13b1,2a23b2,...,2am3bm,代表拆出的序列,并由大到小依次输出。
样例输入
5
10
15
123
3
321
样例输出
2
8 2
2
12 3
3
96 24 3
1
3
4
288 24 6 3
样例解释
- 对于 n = 10 n = 10 n=10,可以拆分为 8 + 2 8 + 2 8+2,其中 8 = 2 3 ⋅ 3 0 8 = 2^3 \cdot 3^0 8=23⋅30 和 2 = 2 1 ⋅ 3 0 2 = 2^1 \cdot 3^0 2=21⋅30。
- 对于 n = 15 n = 15 n=15,可以拆分为 12 + 3 12 + 3 12+3,其中 12 = 2 2 ⋅ 3 1 12 = 2^2 \cdot 3^1 12=22⋅31 和 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=20⋅31。
- 对于 n = 123 n = 123 n=123,可以拆分为 96 + 24 + 3 96 + 24 + 3 96+24+3,其中 96 = 2 5 ⋅ 3 1 96 = 2^5 \cdot 3^1 96=25⋅31, 24 = 2 3 ⋅ 3 1 24 = 2^3 \cdot 3^1 24=23⋅31 和 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=20⋅31。
- 对于 n = 3 n = 3 n=3,可以直接表示为 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=20⋅31。
- 对于 n = 321 n = 321 n=321,可以拆分为 288 + 24 + 6 + 3 288 + 24 + 6 + 3 288+24+6+3,其中 288 = 2 5 ⋅ 3 2 288 = 2^5 \cdot 3^2 288=25⋅32, 24 = 2 3 ⋅ 3 1 24 = 2^3 \cdot 3^1 24=23⋅31, 6 = 2 1 ⋅ 3 1 6 = 2^1 \cdot 3^1 6=21⋅31 和 3 = 2 0 ⋅ 3 1 3 = 2^0 \cdot 3^1 3=20⋅31。
题解
这题题目要求 2 a i 3 b i ≠ 2 a j 3 b j 2^{a_i}3^{b_i} \neq 2^{a_j}3^{b_j} 2ai3bi=2aj3bj
那我们直接令所有的 b = 0 b = 0 b=0,题目就变成了将一个 n n n 转成 2 a i + 2 a i + 1 . . . 2 ^ {a_i} + 2 ^ {a_{i + 1}} ... 2ai+2ai+1...,成了一个简单的二进制转换问题。
由于 a i a_i ai 和 b i b_i bi 的数量很有限,那么其 a i b i a_ib_i aibi 的组合数量也不多。
于是塔子哥猜测,出题人原本不是想考察这个。而是更像考察物品数量比较少,且背包容量比较大的,01背包恰好装满问题,这个可以用 最短路优化背包 的方法解决,但由于在笔试中这个难度有点超纲了,感兴趣的朋友可以自行了解。
代码见网站内部(文章顶部):塔子哥的文字题解