本题要注意测试数据相当的多啊,所以要先构造出所有解并排序,然后用二分查找即可
Bob's Problem | ||
Accepted : 29 | Submit : 193 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
题目描述Bob今天碰到一个问题,他想知道x3+y3 = c 是否存在正整数解? 输入第一行是一个整数K(K≤20000),表示样例的个数。 以后每行一个整数c(2≤c≤109) 输出每行输出一个样例的结果,如果存在,输出“Yes”,否则输出“No”。(引号不用输出) 样例输入2 28 27 样例输出Yes No |
[
Submit Solution ]
#include <cstdio>
#include<cmath>
#include<string.h>
#include<algorithm>
int s[900000];
int main()
{
int a=1,b=1,c,k,t=0;
for(a=1;a<=999;a++)
for(b=1;b<=999;b++)
{
if(a*a*a+b*b*b<=1000000000)
s[t++]=a*a*a+b*b*b;
else
break;
}
std::sort(s,s+t);
scanf("%d",&k);
while(k--)
{
scanf("%d",&c);
int low=0,high=t,mid;
int ok=0;
while(low<high)
{
mid=low+(high-low)/2;
if(s[mid]>c)high=mid;
if(s[mid]==c){ok=1;break;}
if(s[mid]<c)low=mid+1;
}
if(ok)printf("Yes\n");
else printf("No\n");
}
return 0;
}