存在函数
显然
对于二分
或者不进行二分,根据单调性,显然 break
即可。
xxxxxxxxxx
591
2
3
4
5
6
7
8
9
10
11using namespace std;
12using namespace __gnu_pbds;
13
14mt19937 rnd(random_device{}());
15int rndd(int l, int r){return rnd() % (r - l + 1) + l;}
16bool rnddd(int x){return rndd(1, 100) <= x;}
17
18typedef unsigned int uint;
19typedef unsigned long long unll;
20typedef long long ll;
21typedef long double ld;
22
23template<typename T = int>
24inline T read(void);
25
26ll Func(int a, int b){return (ll)a * a * a + (ll)a * a * b + (ll) a * b * b + (ll)b * b * b;}
27int main(){
28 ll N = read<ll>();
29 ll mn(LLONG_MAX);
30 for(int x = 0; x <= (int)1e6; ++x){
31 int l = 0, r = (int)1e6;
32 ll cur(-1);
33 while(l <= r){
34 int mid = (l + r) >> 1;
35 ll tmp = Func(x, mid);
36 if(tmp >= N)cur = tmp, r = mid - 1;
37 else l = mid + 1;
38 }
39 mn = min(mn, cur);
40 }printf("%lld\n", mn);
41 fprintf(stderr, "Time: %.6lf\n", (double)clock() / CLOCKS_PER_SEC);
42 return 0;
43}
44
45template<typename T>
46inline T read(void){
47 T ret(0);
48 short flag(1);
49 char c = getchar();
50 while(c != '-' && !isdigit(c))c = getchar();
51 if(c == '-')flag = -1, c = getchar();
52 while(isdigit(c)){
53 ret *= 10;
54 ret += int(c - '0');
55 c = getchar();
56 }
57 ret *= flag;
58 return ret;
59}
update-2022_10_21 初稿