hdu 2578 Dating with girls(1)(二分查找)

来源:互联网 发布:红包源码 编辑:程序博客网 时间:2024/05/16 14:47

题意:从n个数中找出满足x+y=k的个数

测试数据:

input:

1

6 4

1 2 2 3 4 5

output:

3

代码:

#include<cstdio>#include<algorithm>using namespace std;int a[100005];int b[100005];int cmp(const int x,const int y){    return x<y;}int bi_search(int key,int n){    int low=0,mid,high=n-1;    while(low<=high)    {        mid=(low+high)/2;        if(b[mid]==key)            return 1;        else if(b[mid]<key)            low=mid+1;        else            high=mid-1;    }    return 0;}int main(){    int n,k;    int key;    int flag;    int ans;    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&k);        for(int i=0; i<n; i++)        {            scanf("%d",&a[i]);        }        sort(a,a+n,cmp);        b[0]=a[0];        int j=1;        for(int i=1;i<n;i++)        {            if(a[i]==a[i-1])                continue;            b[j++]=a[i];        }        ans=0;        for(int i=0; i<j; i++)        {            key=k-b[i];            flag=bi_search(key,j);            if(flag)            {                ans++;            }        }        printf("%d\n",ans);    }    return 0;}

0 0