题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=91209#problem/A
题意:给定一个整数几何S,找出一个最大的d,使得a+b+c=d,其中a,b,c,d是S中不同的元素。
分析:
穷举a,b,c,再二分查d,效率很低,水过。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int a[1010],i,j,k,ans,f,n; int comp(int x,int y) {return x>y;}; int finde(int key,int l,int r) {int mid=(r+l)/2; if (l>r) return 0; if (key==a[mid]) {if ((mid!=i)&&(mid!=j)&&(mid!=k)) f=1; return 0; } else if (key<a[mid]) finde(key,mid+1,r); else finde(key,l,mid-1); return 0; } int main() {while (scanf("%d",&n)&&n) { for (i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n,comp); f=0; for (i=0;i<n;i++) for (j=0;j<n-1;j++) for (k=j+1;k<n;k++) {ans=a[i]; if ((i!=j)&&(i!=k)) finde(a[i]-a[j]-a[k],0,n-1); if (f) goto there; } there:; if (f) printf("%d\n",ans); //cin 就超时了 else printf("no solution\n"); } return 0; }