用二分啊
此题用二分就可以不超时了
这题是不是有问题啊,我的怎么都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; }