1 条题解

  • 0
    @ 2025-8-24 22:47:40

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar lailai0916
    Student & Developer

    搬运于2025-08-24 22:47:40,当前版本为作者最后更新于2023-05-23 22:21:46,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    原题链接

    解题思路

    1. 显然,操作一在操作二之前进行更具性价比。因此,最合理的策略是优先执行若干次操作一,然后再进行操作二。

    2. 可以枚举操作一的执行次数:

    • 如果执行 nn 次操作一,可以得到 2n2^n 个人,所需时间为 nan\cdot a
    • 2n2^n 个人出 cc 道问题,所需时间为 c2nb\left\lceil\frac{c}{2^n}\right\rceil\cdot b
    1. 最多只会进行 3030 次操作一,因为 230>1092^{30}>10^9 人已经足够多。通过枚举所有可能的执行次数,计算每种情况下所需的总时间,并取最小值,即 $\min_{n=0}^{30} (n\cdot a+\left\lceil\frac{c}{2^n}\right\rceil\cdot b)$。

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    using ll=long long;
    const ll inf=0x3f3f3f3f3f3f3f3f;
    int main()
    {
    	ios::sync_with_stdio(false);
    	cin.tie(nullptr);
    	int T;
    	cin>>T;
    	while(T--)
    	{
    		ll a,b,c;
    		cin>>a>>b>>c;
    		ll ans=inf;
    		for(int i=0;i<=30;i++)
    		{
    			ans=min(ans,i*a+(c+(1ll<<i)-1)/(1ll<<i)*b);
    		}
    		cout<<ans<<'\n';
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    8785
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者