hdu Can you find it?之折半查找

    技术2022-05-19  26

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

    #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;}     

     

     


    最新回复(0)