Everlasting Pages

返回

CF1463B题解#

题意:#

题目链接 ↗

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

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

  • 从 11 到 nn 的每个 ii 都是 1≤bi≤1091 \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 (或者两者都是(或两者);
  • 2∑i=1n∣ai−bi∣≤S2 \sum \limits_{i = 1}^{n} |a_i - b_i| \le S .

思路:#

对于构造合法解的题目,我们可以先想什么能够稳定的构造相邻整除的数组。再结合2∑i=1n∣ai−bi∣≤S2 \sum \limits_{i = 1}^{n} |a_i - b_i| \le S,不难推得12ai≤bi≤32ai \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的幂。即有:0≤ai−bi<12ai0 \leq a_i - b_i < \frac{1}{2}a_i 求和即有:∑i=1n∣ai−bi∣≤12S\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];
    }
}   
c
CF1463B题解
https://blog.everlasting.xin/blog/cf1463b%E9%A2%98%E8%A7%A3/
Author Everlasting
Published at 2026年5月22日

评论前请阅读隐私政策,请勿在公开评论中填写敏感信息。

评论正在加载,若长时间未显示,请刷新页面重试。