uva 10487 - Closest Sums
来源:互联网 发布:mac截gif 编辑:程序博客网 时间:2024/06/05 22:26
#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;}