[洛谷] 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;
}
原文地址:https://www.cnblogs.com/zeolim/p/12270755.html