您的位置:首页 > 其它

HDU 2578(二分查找)

2015-12-04 18:26 375 查看
686MS

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>

using namespace std;

int a[100010];

int n;

bool bsearch(int key)
{
int lo = 0,hi = n-1,mid = lo+(hi-lo)/2;
while(lo<=hi)
{
if(key==a[mid])
return true;
else if(key >a[mid])
{
lo = mid+1;
mid = lo+(hi-lo)/2;

}
else
{
hi = mid-1;
mid =lo+(hi-lo)/2;
}
}
return false;
}

int main()
{
int t,m,i;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for(i = 0;i<n;i++)
scanf("%d",&a[i]);
int count = 0;

sort(a,a+n);

for(i = 0;i<n;i++)
{
if(a[i]>m/2) break;

if(a[i] == a[i-1])
continue;

if(2*a[i]==m)
count++;
else if(bsearch(m-a[i]))
count+=2;
}
printf("%d\n",count);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: