codeforces 1490 C Sum of Cubes (二分)

题面

在这里插入图片描述

题意

给你一个x,问是否存在 x = a3 + b3 ,输出 YES/NO

题解

  1. 注意数据范围x是1e12,那么a,b的范围就是1e4,枚举a,然后二分b ,二分条件就是 b3 = x - a3
  2. 当然还可以用双指针做,一直缩小范围就好

代码1(二分)

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

ll t, x;

int main() {
    
    

    cin >> t;
    while (t--) {
    
    
        cin >> x;
        bool flag = false;
        for (ll i = 1; i <= 10000; i++) {
    
    
            if (i * i * i >= x) break;
            ll res = x - i * i * i;
            ll l = 1, r = 10000;
            while (l < r) {
    
    
                ll mid = (l + r) >> 1;
                if (mid * mid * mid >= res) r=mid;
                else l=mid+1;
            }
            if(l*l*l==res){
    
    
                flag= true;
                break;
            }
        }
        if (flag) cout << "YES" << endl;
        else cout << "NO" << endl;
    }

    return 0;
}

代码2(双指针)

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

ll t, x;

int main() {
    
    

    cin >> t;
    while (t--) {
    
    
        cin >> x;
        bool flag = false;
        for (ll i = 1, j = pow(x, 1.0 / 3)+9; i <= j; i++) {
    
    
            while (i*i*i+j*j*j > x && j > 0) j--;
            if (i*i*i+j*j*j == x && j != 0) {
    
    
                flag = true;
                break;
            }
        }
        if (flag) cout << "YES" << endl;
        else cout << "NO" << endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44791484/article/details/113844514
今日推荐