1 条题解

  • 0
    @ 2025-3-29 17:36:40

    本题可以使用双指针,可以用一个数取最小值,一个数取最大值来向X的中间值来逼近,类似于二分枚举的思想

    #include<cstdio>
    #include<iostream>
    #include<vector>
    #include<map>
    #include<cstring>
    #include<array>
    #include<queue>
    #include<algorithm>
    #include<set>
    #include<cmath>
    using namespace std;
    using i64=long long;
    //using i128=__int128;
    const i64 INF=1e18;
    const int mod=998244353;
    //const int N=1e9+7;
    i64 qmi(i64 a,i64 b){
        i64 res=1;
        while(b){
            if(b&1)res*=a;
            a*=a;
            b>>=1;
        }
        return res;
    }
    void solve(){
        i64 n;
        cin>>n;
        i64 a=0,b=1e6;
        i64 minX=1e18;
        while(a<=b){
            i64 X=qmi(a,3)+qmi(a,2)*b+a*qmi(b,2)+qmi(b,3);
            if(X>=n){
                minX=min(minX,X);
                b--;
            }
            else a++;
        }
        cout<<minX<<'\n';
    }
    int main(){
        int _=1;
        //cin>>_;
        while(_--)solve();
        return 0;
    }
    
    • 1

    信息

    ID
    304
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    109
    已通过
    16
    上传者