CF1490C Sum of Cubes 【暴搜】
Codeforces 1490C -> Click Here
题意
求数 \(x\) 是否满足 \(a^3+b^3=x\) , \(a\),\(b\)为任意两个正整数
思路
直接暴力搜索,先把 \(1\) 到 \(10000\) 的立方 \(a^3\) 存起来再遍历此数组,求出\(x\) 与 \(a^3\) 的差,判断差是否为某个数的立方
(求某个数的三次方可用 <cmath> 中的 cbrt 函数,算是触及到我的知识盲区了,视力问题,没看见要开long long直接将我卡飞
code
#include<iostream>
#include<cmath>
#define REP(i,a,b) for(ll i=(a);i<=(b);i++)
#define FOR(i,a,b) for(ll i=(a);i<(b);i++)
using namespace std;
typedef long long ll;
ll n;
ll A[10000],cnt=0;
bool pan(ll x){
ll a=cbrt(x);
if(a*a*a==x) return true;
return false;
}
void solve(){
cin>>n;
for(ll i=1;i<=n;i++){
ll x=A[i];
if(n<=x) break;//如果a比x还大,那就直接break掉
if(pan(n-x)){
cout<<"YES\n";
return;
}
}
cout<<"NO"<<endl;
}
void init(){
REP(i,1,10000) A[++cnt]=i*i*i;//把a的三次方存起来
}
int main(){
init();
int T;
cin>>T;
while(T--)
solve();
return 0;
}

浙公网安备 33010602011771号