/*先排序,再二分*/
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b)
{
return (*(int *)a)-(*(int *)b);
}
int main()
{
int n,k,t;
int i,j;
int s[100005],d[100005],cnt;
int low,hig,mid;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
scanf("%d",&d[i]);
qsort(d,n,sizeof(d[0]),cmp);
for(i=0,j=0;i<n;i++)
if(d[i]!=d[i+1])
s[j++]=d[i];
for(i=0,cnt=0,n=j;i<n;i++)
{
low=0;hig=n-1;
while(low<=hig)
{
mid=(hig+low)/2;
if(s[mid]+s[i]==k)
{
cnt++;
break;
}
else if(s[mid]+s[i]>k)
hig=mid-1;
else
low=mid+1;
}
}
printf("%d\n",cnt);
}
return 0;
}
hdu 2578
最新推荐文章于 2016-01-01 14:45:11 发布