Bob's Problem | ||
Accepted : 47 | Submit : 307 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
题目描述Bob今天碰到一个问题,他想知道x 3 +y 3 = c 是否存在正整数解? 输入第一行是一个整数K(K≤20000),表示样例的个数。 以后每行一个整数c(2≤c≤10 9) 输出每行输出一个样例的结果,如果存在,输出“Yes”,否则输出“No”。(引号不用输出) 样例输入2 28 27 样例输出Yes No |
我的代码:
#include<cstdio>
#include<cstring>
#include<cmath>
int a[1005];
int bs(int x)
{
int l=1,r=1000,mid;
while(r>=l)
{
mid=(l+r)/2;
if(a[mid]==x)
return 1;
else if(a[mid]<x)
l=mid+1;
else
r=mid-1;
}
return 0;
}
int main()
{
int k,i,j,flag,s,c;
for(i=1;i<=1000;i++)
{
a[i]=i*i*i;
}
scanf("%d",&k);
while(k--)
{
flag=true;
scanf("%d",&c);
for(i=1;i<=1000;i++)
{
s=c-a[i];
if(bs(s))
{
printf("Yes\n");
flag=false;
break;
}
}
if(flag)
printf("No\n");
}
return 0;
}
题解:用到了set集合,STL还未系统学习,暂不分析。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
int nb[3000],tot=0;
int main()
{
freopen("std.in","r",stdin);
freopen("out.txt","w",stdout);
set<int> st; st.clear();
for(int i=1;i<1010;i++)
{
nb[tot++]=i*i*i;
}
for(int i=0;i<tot;i++)
{
for(int j=i;j<tot;j++)
{
st.insert(nb[i]+nb[j]);
}
}
int a,T_T;
while(scanf("%d",&T_T)!=EOF)
{
while(T_T--)
{
scanf("%d",&a);
int flag=st.count(a);
if(flag) puts("Yes");
else puts("No");
}
}
return 0;
}