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;
}
posted @ 2021-08-08 16:46  莳曳  阅读(181)  评论(0)    收藏  举报