`

hdu Can you find it?之折半查找

 
阅读更多

这道题说明:折半查找时间复杂度低,数据可以边吸收边计算,空间复杂度低,有效的代替了暴力算法、把查找与等式相融合、

#include<stdio.h>
#include<stdlib.h>
int sum[250005];
int com(const void *a,const void *b)
{
return *(int*)a-*(int *)b;
}
int midsearch(int key,int low,int high)
{
int mid;
while(low<=high){
mid=(low+high)/2;
if(sum[mid]==key)return 1;
else if(key<sum[mid])high=mid-1;
else if(key>sum[mid])low=mid+1;
}
return 0;
}
main()
{
int l,n,m;
int a[505],b[505],c,x;
int s,cas=0;
int i,k;
int flag,key;

while(cas++,scanf("%d%d%d",&l,&n,&m)!=-1){

printf("Case %d:/n",cas);
for(i=0;i<l;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
k=0;
while(m--){
scanf("%d",&c);
for(i=0;i<n;i++)
sum[k++]=c+b[i];
}
qsort(sum,k,sizeof(int),com);
scanf("%d",&s);
while(s--){
flag=0;
scanf("%d",&x);
for(i=0;i<l;i++){
key=x-a[i];
if(midsearch(key,0,k-1)){
flag=1;
break;
}
}
if(flag==0)
printf("NO/n");
else printf("YES/n");
}
}
return 0;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics