#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,que,cas=0,num[1010],sum[500000],minn,a,b,number;
int bsearch()
{
int m,x=0,y=number;
while(x<y)
{
m=x+(y-x)/2;
if(sum[m]==que)
{
minn=m;
return sum[m];
}
else if(sum[m]<que) x=m+1;
else y=m;
}
minn=sum[x];
if(x+1<=number)
minn=abs(sum[x+1]-que)>abs(sum[y]-que)?sum[y]:sum[x+1];
if(x-1>-1)
minn=abs(sum[x-1]-que)>abs(minn-que)?minn:sum[x-1];
return minn;
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&n)!=EOF&&n)
{
printf("Case %d:\n",++cas);
for(int i=0; i<n; i++)
scanf("%d",&num[i]);
number=0;
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
sum[number++]=num[i]+num[j];
}
sort(sum,sum+number);
scanf("%d",&m);
for(int i=0; i<m; i++)
{
scanf("%d",&que);
int m=bsearch();
printf("Closest sum to %d is %d.\n",que,m);
}
}
return 0;
}
uva 10487 - Closest Sums
最新推荐文章于 2017-04-25 14:42:00 发布