HDU2578.Dating with girls(1)——二分

来源:互联网 发布:淘宝店铺怎么改名字啊 编辑:程序博客网 时间:2024/05/17 03:07

http://acm.hdu.edu.cn/showproblem.php?pid=2578

题目描述:
n个数的序列,求有多少组(x,y)使得x+y=sum,x1!=x0 or y1!=y0为不同的方案

分析:
排序+二分,去重

#include<cstring>#include<cstdio>#include<algorithm>const int MAXN=1000010;using namespace std;int a[MAXN];int n,k;bool binary_search(int x){    int l=1,r=n,mid;    while(l<=r){        mid=l+(r-l)/2;        if(a[mid]==x) return true;        if(a[mid]>x) r=mid-1;        else l=mid+1;    }    return false;}int main(){#ifndef ONLINE_JUDGEfreopen("in.cpp","r",stdin);#endif // ONLINE_JUDGE    int T;    a[0]=-1;    scanf("%d",&T);    while(T--){        scanf("%d%d",&n,&k);        for(int i=1;i<=n;++i) scanf("%d",&a[i]);        sort(a+1,a+n+1);        int ans=0;        for(int i=1;i<=n;++i){            if(a[i]==a[i-1]) continue;            if(binary_search(k-a[i]))                ans++;        }        printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击