10487

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <iostream>
//#include <cstdlib>

#define ll long long

using namespace std;

int a[1010];
vector<int> sum;

int binarySearch(int num,int lw,int hi)
{
	if(hi-lw==1)
	{
		int diff1 = abs(num-sum[lw]);
		int diff2 = abs(num-sum[hi]);
		if(diff1<diff2)
		return sum[lw];
		else
		return sum[hi];
	}
	int mid=(lw+hi)>>1;
	if(num<=sum[mid])
	return binarySearch(num,lw,mid);
	else
	return binarySearch(num,mid,hi);
	return 0;
}
int main()
{
	int n,qry,ans,num;
	int kase=1;
	while(scanf("%d",&n),n)
	{
		for(int i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		sum.clear();
		for(int i=0;i<n;i++)
		{
			for(int j=i+1;j<n;j++)
				sum.push_back(a[i]+a[j]);
		}
		sort(sum.begin(),sum.end());
		int len=sum.size();
		bool flag=false;
		scanf("%d",&qry);
		while(qry--)
		{
			scanf("%d",&num);
			ans = binarySearch(num,0,len-1);
			if(!flag)
			printf("Case %d:\n",kase++);
			flag=true;
			printf("Closest sum to %d is %d.\n",num,ans);
		}
	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *