1 条题解

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

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Utilokasteinn
    技不如人

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

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

    以下是正文


    大水题,但是还是错了一次,半分钟打出一个暴力求解,结果TLE了5个点,代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int v,a,b,s=0;
    	cin>>a>>b>>v;
    	for(int i=1;s+=a;i++,s-=b)
    		if(s>=v)cout<<i,exit(0);
    }
    

    然而正解是O(1)输出,当然TLE。

    很容易发现,如果直接将v/(a-b)会出错。因为如果白天已经到了,就不用往下滑了。所以,先将高度减去一个白天上升的高度,然后再除以a-b的差,如果有余数,就要天数就要+1,或者直接用ceil函数(向上取整),最后还有加上刚开始减去的那个白天,也就是天数+1,所以得出的公式是ceil(1.0*(v-a)/(a-b))+1,但是,由于ceil返回的数是浮点数,所以最后还有强制类型转换。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int a,b,v;
        cin>>a>>b>>v;
        cout<<int(ceil(1.0*(v-a)/(a-b))+1);
        return 0;
    }
    

    谢谢观赏。

    • 1

    信息

    ID
    5508
    时间
    100ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者