基础题
数据存入数组
从后往前查每个数字能不能被该数字前的数字与该数字前的那个数字前的任一数字所组合成功
二分查找成功计数
代码如下
#include <iostream>
#include <algorithm>
using namespace std;
int a[2000010];
bool dbfind(int x[],int len,int key)
{
int l = 0,r = len-1,mid;
while(l<=r)
{
mid = (l+r)/2;
if(key > x[mid])
l = mid+1;
else if(key < x[mid] )
r = mid-1;
else
return true;
}
return false;
}
int main()
{
int n,ans=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int i=n-1;i>0;i--)
{
int s=a[i];
for(int j=i-1;j>=0;j--)
{
if(dbfind(a,j,s-a[j]))
{
ans++;
break;
}
}
}
cout<<ans<<endl;
return 0;
}