【题解】伐木工

题意

根长度为的木头,表示对长度为的木头进行每米切割一次,例如木头会被切割成三段。现在进行的操作。操作完之后剩下有段木头,求原来的是多少。

题解

题面的中转换一下就可以变为,先解决第一个问题,这个求和如何快速求解,由于是取整操作,对于不同的值其取整的值可能是一样的,而且不同数的级别的的,因为一个数是由构成的,所以不同的数只会有级别个。所以在某个区间内的值是一样的。那么已知该区间的左端点为,如何求解右端点呢。由于的值是单调递减的,所以可以考虑用二分来查找右端点。

int Find(int n,int i)
{
    int x=(n+i-1)/i;
    int l=i;
    int r=n;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if((n+mid-1)/mid<x)
            r=mid-1;
        else
            l=mid+1;
    }
    return r;
}

这样就能在的复杂度下来求解的值了。然后再考虑已知的值如何求解。由于该求和函数也是具有单调性的,所以我们可以使用二分来求解,每次的带入我们上面说到的求解方法求出其值,若其值大于说明右区间大了,反之左区间小了。若等于则退出。

复杂度

时间复杂度

代码

#include<bits/stdc++.h>
using namespace std;
int Find(int n,int i)
{
    int x=(n+i-1)/i;
    int l=i;
    int r=n;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if((n+mid-1)/mid<x)
            r=mid-1;
        else
            l=mid+1;
    }
    return r;
}
long long f(int n)
{
    long long ans=0;
    for(int i=1,last; i<=n; i=last+1)
    {
        last=Find(n,i);
        ans+=(last-i+1)*((n+i-1)/i);
    }
    return ans;
}
int main()
{
    long long m;
    scanf("%lld",&m);
    int flag=0;
    int l=1;
    int r=1e9;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        long long fmid=f(mid);
        if(fmid==m)
        {
            printf("%d\n",mid);
            flag=1;
            break;
        }
        if(fmid<m)
            l=mid+1;
        else
            r=mid-1;
    }
    if(!flag)
        printf("-1\n");
    return 0;
}

全部评论

相关推荐

萧索X:写篮球联赛干嘛,陪老板打篮球吗。还有实习经历要写自己所在岗位具体完成什么工作,自己的任务具体完成了什么需求,给公司带来了哪些量化增长
点赞 评论 收藏
分享
01-14 10:23
已编辑
湖南师范大学 计调
太久没更新,前几天看到一条评论,说“牛客就是当年那群做题区毕业了开始找工作还收不住那股味”的群体。字里行间透着居高临下的评判,不是,他该不会以为自己很幽默?很犀利吧?作为在牛客混了不算短日子的用户,我感到的不只是被冒犯,更是一种深刻的悲哀——这种以“松弛感”为名,对另一种生存策略的轻蔑,颇有一种自己考不上大学早早出来混社会,嘲笑考上大学的人是书呆子,然后大言不惭地说:死读书有什么用,人脉和资源才是硬道理。我不知道说这个话的人,手头究竟握着多少真正管用的人脉与资源,也不知道他这么傲慢地说出“那股味”的时候,是站在哪一个巨人的肩膀上,才能如此“松弛从容”地俯视众生,还能品评出别人身上“没收住”的余...
淬月星辉:这种评论把正常的努力扭曲成卷😂,说白了就是自己不努力,看着身边努力的人一个个都事业有成了,自己的心里开始不平衡了,就发这种酸言酸语。牛客可以说是我用过那么多平台里社区氛围最好的论坛了,用了大半年了,基本上没见过有人吵架的,都是在互帮互助提建议,帮忙看简历的,帮忙选offer的,帮忙指点学习路线的,分享工作经验和趣事的,我觉得这才是互联网该有的样子。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务