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;
}