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;}

原创粉丝点击