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_JUDGE
freopen("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;
}