题目链接
给你一个数组 [a1,a2,…,an] ,其中有 1≤ai≤109 。设 S 是数组 a 中所有元素的和。
如果 n 个整数组成的数组 b 漂亮,那么我们就把这个数组称为 b :
- 从 1 到 n 的每个 i 都是 1≤bi≤109 ;
- 对于数组 (bi,bi+1) 中的每一对相邻整数,要么是 bi 除以 bi+1 ,要么是 bi+1 除以 bi (或者两者都是(或两者);
- 2i=1∑n∣ai−bi∣≤S .
对于构造合法解的题目,我们可以先想什么能够稳定的构造相邻整除的数组。再结合2i=1∑n∣ai−bi∣≤S,不难推得
21ai≤bi≤23ai
注意到存在21ai,可以想到把每一个bi都设置成小于等于bi的最大的2的幂。即有:0≤ai−bi<21ai
求和即有:
i=1∑n∣ai−bi∣≤21S
满足要求
for (int i = 1; i <= n; i++) {
cout << (1LL << __lg(t)) << " \n"[i == n];