C. Sum of Cubes 题意:t组数据 每组数据输入一个数 输入的数的数据范围1–1e12 看此数能否由 两个数的三次方的和表示 能则输出 YES ,否则输出 NO 。 题解:这里 根据数据范围可以将 1-1000 的三次方的数都存下来 遍历数组从而 将问题转换为 两个三次方的数相加是否可以得到输入的数,此过程应用了二分的思想。 代码: #include<iostream> using namespace std; long long a[10010]; void judge(long long x) { for (int i = 1; a[i] <x; i++) { long long b = x - a[i]; int l = 1, r = 10000; while (l < r) { int mid = l + r >> 1; if (a[mid] >= b)r = mid; else l = mid+1 ; } if (a[l] == b) { cout << "YES\n"; return; } } cout << "NO\n"; } int main() { cin.tie(nullptr)->sync_with_stdio(false); for (long long i = 1; i <= 10000; i++) { a[i] =i*i*i; }//int*int*int不可以转换为long long int t; cin >> t; while (t--) { long long x; cin >> x; judge(x); } return 0; } 二分查找思想