1 条题解

  • 0
    @ 2025-8-24 21:41:51

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar IcyFoxer_XZY
    林が深い時は鹿を見る

    搬运于2025-08-24 21:41:51,当前版本为作者最后更新于2022-02-10 09:03:48,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    题目

    这道题挺简单的,怎么才74个AC?

    废话不多说,讲一下思路:

    题目给出合法的四元组的数量 nn,求最小的 mm

    那么我们就可以二分 mm 了,用 checkcheck 来枚举。

    可是,题目可能有多个 mm 满足 check(m)=ncheck(m)=n。我们需要找出最小的。

    别急,把 check(m)<ncheck(m)<n 的最大 m+1m+1 不就行了么?

    代码来了!

    #include<iostream>
    #define int long long//基本操作 
    using namespace std;
    int check(int x){
        int sum=0;
        for(int i=2;i*i*i<=x;i++)sum+=x/(i*i*i);
        return sum;//返回sum 
    }
    signed main(){//main返回signed也是可以的 
        int n,l=1,r=5000000000000000,ans;
        cin>>n;
        while(l<=r){//二分答案 
            int mid=(l+r)/2;
            if(check(mid)<n)ans=mid,l=mid+1;
            else r=mid-1;
        }
        cout<<(check(ans+1)==n?ans+1:-1);//三目运算(格式:表达式1?成立时执行:不成立时执行;) 
        return 0;//Wonderful!
    }//区区19行代码! 
    

    Bye!

    • 1

    信息

    ID
    1886
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者