codeforces 1490C

又又又不是一道二分…思维+ s t l stl stl运用
题目链接

题目大意

给你一个正整数 x x x,请检查数字 x x x 是否可以表示为两个正整数 a , b a,b a,b的立方之和。

思路

我们用 s e t set set保存每一个可能的 a 3 a^3 a3,遍历找 b 3 b^3 b3,如果 b b b存在且为正整数,则输出对
本题只要求查找,我们可以用 u n o r d e r e d unordered unordered_ s e t set set,更快

ACcode

#include

using namespace std;

using ll = long long;

const ll M = 1e12;

unordered_setmp;

void init()
{
    for (ll i = 1;i * i * i <= M;i++) {
        mp.insert(i * i * i);
    }
}
void solve()
{
    ll x;cin >> x;
    for (ll i = 1;i * i * i <= x;i++) {
        if (mp.count(x - i * i * i)) {
            cout << "YES" << '\n';
            return;
        }
    }
    cout << "NO" << '\n';
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t;cin >> t;
    init();
    while (t--) {
        solve();
    }
    return 0;
}


你可能感兴趣的:(codeforces,板刷二分,rating,1200,算法,数据结构)