1 条题解

  • 0
    @ 2025-8-24 23:17:03

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Mark_Pei
    犹豫,就会败北

    搬运于2025-08-24 23:17:03,当前版本为作者最后更新于2025-06-03 22:55:44,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Solution

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

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

    最后至于 double 的精度问题,我们可以先减去一个较小的数如 10610^{-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;
    }
    
    • 1

    信息

    ID
    12394
    时间
    2000ms
    内存
    1024MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者