3 条题解

  • 2
    @ 2026-8-28 14:37:03

    题目大意

    题目描述清楚,不做赘述

    解题思路

    定义 f(a,b)=a3+a2b+ab2+b3f(a,b)=a^{3}+a^{2}b+ab^{2}+b^{3} ,则有:

    f(a+1,b)f(a,b)f(a+1,b)-f(a,b) $$=(a+1)^{3}+(a+1)^{2}b+(a+1)b^{2}+b^{3}-a^{3}+a^{2}b+ab^{2}+b^{3}$$=3a2+(3+2b)a+(1+2b+b2)=3a^{2}+(3+2b)a+(1+2b+b^{2})

    题目要求 a,b0a,b≥0 ,所以 f(a,b)f(a,b) 具有单调性,二分 // 双指针都能过

    O(n13)O(n^\frac{1}{3}) 双指针代码 ::

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int n;
    int check(int a,int b){
    	return (a*a+b*b)*(a+b);
    }
    signed main(){
    	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    	cin>>n;
    	
    	int l=0,r=1e6;
    	int ans=1e18;
    	while(l<=r){
    		if(check(l,r)>=n)ans=min(check(l,r),ans),r--;
    		else l++;
    	}
    	cout<<ans<<'\n';
    	
    	return 0;
    }
    

    O(n13logn13)O(n^\frac{1}{3}logn^\frac{1}{3}) 二分代码

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int n;
    int check(int a,int b){
    	return (a*a+b*b)*(a+b);
    }
    signed main(){
    	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    	cin>>n;
    	int l=0,r=1e6;
    	int k=0;
    	while(l<=r){
    		int mid=(l+r)>>1;
    		if(mid*mid*mid>=n)k=mid,r=mid-1;
    		else l=mid+1;
    	}
    	
    	int ans=1e18;
    	for(int i=0;i<=k;i++){
    		int l=i,r=k;
    		while(l<=r){
    			int mid=(l+r)>>1;
    			if(check(i,mid)>=n)ans=min(ans,check(i,mid)),r=mid-1;
    			else l=mid+1;
    		}
    	}
    	cout<<ans<<'\n';
    	
    	return 0;
    }
    

    信息

    ID
    12440
    时间
    2000ms
    内存
    1024MiB
    难度
    7
    标签
    递交数
    50
    已通过
    11
    上传者