0
点赞
收藏
分享

微信扫一扫

2-variable Function

AtCoder Beginner Contest 246 D - 2-variable Function

Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 400points

Problem Statement

Given an integer NN, find the smallest integer XX that satisfies all of the conditions below.

  • XX is greater than or equal to NN.
  • There is a pair of non-negative integers (a, b)(a,b) such that X=a^3+a^2b+ab^2+b^3X.

Constraints

  • N is an integer.
  • 0≤N≤10^18

思路:考虑到N是一个很大的数,首先得开long long,其次,如果我们双重循环枚举a和b的话,必然会超时。所以我们枚举a,二分查找b,这样效率会快很多。注意二分模板的默写边界情况

AC代码


#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
ll n, ans=pow(10,18);

ll check(ll a, ll b)
{
    return ((a * a + b * b) * (a + b));
}

int main()
{
    cin >> n;
    for (ll  i = 0; i <= 1000010; i ++ )
    {
        ll l = 0, r = 1000010;
        while(l < r)
        {
            ll mid = l + r  >> 1;
            if(check(i, mid) >= n)   r = mid;
            else l = mid + 1;
        }
        ans = min(ans,check(i, l));
    }
    cout << ans << endl;
    return 0;
}
举报

相关推荐

0 条评论