当前位置: 代码迷 >> 综合 >> HDUnbsp;2578nbsp;nbsp;Datingnbsp;withnbsp;girls(1)
  详细解决方案

HDUnbsp;2578nbsp;nbsp;Datingnbsp;withnbsp;girls(1)

热度:62   发布时间:2024-01-04 11:08:57.0

排序后二分查找即可;

代码:

#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
 return *(int *)a-*(int *)b;
}
int main()
{
 int k,n,i,t,num,mid,low,hig;
 int a[100002],c[100002];
 scanf("%d",&t);
 while(t--)
 {
  scanf("%d%d",&n,&k);
  for(i=0;i<n;i++)
   scanf("%d",&a[i]);
  qsort(a,n,sizeof(a[0]),cmp);//排序
  num=0;
  for(i=0;i<n;i++)//取出相同的数
   if(a[i]!=a[i+1])
    c[num++]=a[i];
  n=num;num=0;
  for(i=0;i<n;i++)//二分查找,
  {
   low=0;hig=n-1;
   while(low<=hig)
   {
    mid=(hig+low)/2;
    if(c[mid]+c[i]==k){
     num++;
     break;
    }
    else if(c[mid]+c[i]>k)
     hig=mid-1;
    else
     low=mid+1;
   }
  }
  printf("%d\n",num);
 }
 return 0;
}

  相关解决方案