[洛谷] P2141 珠心算测验
基础题
数据存入数组
从后往前查每个数字能不能被该数字前的数字与该数字前的那个数字前的任一数字所组合成功
二分查找成功计数
代码如下
#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;
}