题目描述
Given an array a with elements numbered from 1 to 100. Initially, ai=0 for 1≤i<100, and the last element a100 is equal to 1.
The array a can be modified using increment operations. To perform m increment operations, it is necessary to select m integers p1,p2,…,pm (1≤pi<100) and sequentially execute assignments api←(api+api+1) for i from 1 to m.
Given an integer n, find the sequence of increment operations after which the element at the first position in array a becomes equal to n.
输入格式
The first line contains two integers t and g (1≤t≤100, 0≤g≤5) --- the number of input sets and the test block number, respectively.
In the next t lines, there is a single integer n (1≤n≤1018) --- the value that a1 should be equal to after performing the increment operations in the corresponding set.
输出格式
For each set of input data, output one integer m (0≤m≤2000) in the first line --- the number of increase operations.
In the second line, output m integers pi (1≤pi<100) --- the parameters of the increase operations.
If there are multiple correct answers, you can output any of them.
1 0
1
99
99 98 ... 7 6 5 4 3 2 1
2 0
3
16
101
99 98 ... 7 6 5 4 3 2 1 1 1
103
99 98 ... 7 6 5 4 4 3 3 2 2 1 1
提示
For clarity, the examples of the input data in the problem statement have been reduced. To obtain the correct answer, replace ... with the sequence of integers from 97 to 8.
Let's consider the second set of input data for the second example, where n=16. The first 8 elements of the array a after performing the next operation look as follows:
- p1 = 99, a=[0,0,0,0,0,0,0,0,…,0,0,1,1];
- p2 = 98, a=[0,0,0,0,0,0,0,0,…,0,1,1,1];
- …
- p93=7, a=[0,0,0,0,0,0,1,1,…,1,1,1,1];
- p94=6, a=[0,0,0,0,0,1,1,1,…,1,1,1,1];
- p95=5, a=[0,0,0,0,1,1,1,1,…,1,1,1,1];
- p96=4, a=[0,0,0,1,1,1,1,1,…,1,1,1,1];
- p97=4, a=[0,0,0,2,1,1,1,1,…,1,1,1,1];
- p98=3, a=[0,0,2,2,1,1,1,1,…,1,1,1,1];
- p99=3, a=[0,0,4,2,1,1,1,1,…,1,1,1,1];
- p100=2, a=[0,4,4,2,1,1,1,1,…,1,1,1,1];
- p101=2, a=[0,8,4,2,1,1,1,1,…,1,1,1,1];
- p102=1, a=[8,8,4,2,1,1,1,1,…,1,1,1,1];
- p103=1, a=[16,8,4,2,1,1,1,1,…,1,1,1,1].
Scoring
The first four test blocks allow using no more than 300 increment operations.
- (4 points): n≤100;
- (6 points): n=k2 for some integer 1≤k≤100;
- (10 points): n=(2k−1) for some integer k;
- (13 points): n is a Fibonacci number (i.e., n is an element of the sequence where each element is the sum of the two previous ones: 1,1,2,3,5,8,13,21,34,…);
- (up to 67 points): without additional restrictions. Let the maximum number of increment operations used be c. If c≤300, you will receive 67 points, otherwise you will receive ($17 + \left \lfloor \frac{2000 - c}{34} \right \rfloor$) points.
The C++ code that calculates the number of points for the last test block depending on the number of increment operations used is:
((c <= 300) ? 67 : (17 + (2000 - c) / 34))