296 字
1 分钟
CF1463B题解

CF1463B题解#

题意:#

题目链接

给你一个数组 [a1,a2,,an][a_1, a_2, \dots, a_n] ,其中有 1ai1091 \le a_i \le 10^9 。设 SS 是数组 aa 中所有元素的和。

如果 nn 个整数组成的数组 bb 漂亮,那么我们就把这个数组称为 bb

  • 11nn 的每个 ii 都是 1bi1091 \le b_i \le 10^9
  • 对于数组 (bi,bi+1)(b_i, b_{i + 1}) 中的每一对相邻整数,要么是 bib_i 除以 bi+1b_{i + 1} ,要么是 bi+1b_{i + 1} 除以 bib_i (或者两者都是(或两者);
  • 2i=1naibiS2 \sum \limits_{i = 1}^{n} |a_i - b_i| \le S .

思路:#

对于构造合法解的题目,我们可以先想什么能够稳定的构造相邻整除的数组。再结合2i=1naibiS2 \sum \limits_{i = 1}^{n} |a_i - b_i| \le S,不难推得12aibi32ai \frac{1}{2}a_i \leq b_i \leq \frac{3}{2}a_i 注意到存在12ai \frac{1}{2}a_i,可以想到把每一个bib_i都设置成小于等于bib_i的最大的22的幂。即有:0aibi<12ai0 \leq a_i - b_i < \frac{1}{2}a_i 求和即有:i=1naibi12S\sum \limits_{i = 1}^{n} |a_i - b_i| \leq \frac{1}{2}S 满足要求

代码:#

void solve ()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
int t;
cin >> t;
cout << (1LL << __lg(t)) << " \n"[i == n];
}
}
CF1463B题解
https://blog.everlasting.xin/posts/cf1463b题解/
作者
Everlasting
发布于
2026-05-22
许可协议
CC BY-NC-SA 4.0