题解:P12642 [KOI 2024 Round 1] 加倍

· · 题解

Solution

我们先把 b 都变为相同,然后比较 a,如果前一个数的 a 更大,那么 b 再加 1,即再乘以 2。只需要遍历序列,对每个数进行以上操作即可。

然后可以将 a_i 设为 \log_2 a_i ,这样就会 ×2 就会变成 +1

最后至于 double 的精度问题,我们可以先减去一个较小的数如 10^{-6},再向上取整即可。

AC code

#include<bits/stdc++.h>
using namespace std;
const double eps=1e-6;
long long n,x,s;
double a,b;
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>x;
        b=log2(x);
        if(a>b)
        {
            x=ceil(a-b-eps); 
            s+=x;
            b+=x;
        }
        a=b;
    }
    cout<<s;
    return 0;
}