ABC246 D - 2-variable Function

很重要的一点就是,看到代数式要很自然地去推导数据范围

D - 2-variable Function (atcoder.jp)

题意:

ABC246 D - 2-variable Function_第1张图片 

思路:

看到三次方,n的范围又是1e18,因此a,b的范围就是1e6,因此可以去枚举a或b其中一个

这道题可以用双指针,从小到大枚举a,从大到小枚举b,因为r只会变小,因此只扫一遍,复杂度是n的开三次方,即1e6

Code:

#include 
using namespace std;
#define int long long
const int mxn=2e5+10;
const int mxe=2e5+10;
const int mod=998244353;
const int Inf=1e18;

int n;
int F(int x,int y){
    return x*x*x+x*x*y+x*y*y+y*y*y;
}
void solve(){
    cin>>n;
    int ans=1e18,res;
    int r=1e6;
    for(int l=0;l<=1e6;l++){
        while(r>=0&&F(l,r)>=n){
            ans=min(ans,F(l,r));
            r--;
        }
    }
    cout<>__;
    while(__--)solve();return 0;
}

你可能感兴趣的:(Tricks,c++,算法,开发语言)