用二分啊
此题用二分就可以不超时了
这题是不是有问题啊,我的怎么都WA了啊
大神,帮忙看看吧,我先用一个f[1000]来存每个数的3次方,然后再查每个数的时候用二分查找
帮我看看那儿错了啊
#include<iostream>
#include<cstdio>
using namespace std;
long long f[1001];
bool find(long long g)
{
	int i=1,j=1000;
	int mid;
	while(i<j)
	{
		mid=(i+j)/2;
		if(f[mid]>=g)
		{
			j=mid;
		}
		else
		i=mid+1;
		//else return true;
	}
	if (f[i]==g) return true;
	else return false;
	//return false;
}
int main()
{
	long long x;
	for (int i=1;i<=1000;i++)
		f[i]=i*i*i;
	int n;
	bool c;
	//cin>>n;
	scanf("%d",&n);
	while(n--)
	{
		//cin>>x;
		scanf("%lld",&x);
		c=false;
			for (int j=1;j<=1000;j++)
			{
				if (find(x/j)&&(x%j==0)) c=true;
				//else if(f[i]*j>x) break;
			}
		if (c) printf("YES\n");//cout<<"YES"<<endl;
		else printf("NO\n");//cout<<"NO"<<endl;
	}
	return 0;
}
© 2015 HUST ACMICPC TEAM. All Right Reserved.