ZOJ 1101 Gamblers 二分

2014-11-24 07:11:07 · 作者: · 浏览: 0

让你在一堆互不相同的数中查找是否有a=b+c+d,若有不同的解,则输出最大的。

思路:

排序后二分,从大到小枚举。设sum=a[index]-a[i]-a[j],然后查找sum是否在数组中存在即可。

二分要写对,然后i==j || index==j || index==i等于的情况要去除。

还有用goto从内重循环直接跳出,而不是用个标记一次次判断,简洁而优雅。

#include
  
   
#include
   
     using namespace std; const int MAXN=1024; int a[MAXN]; int n; int search(int target) { int L=0,R=n-1; while(L
    
     >1); if(a[mid]==target) return mid; else if(a[mid] < target) L=mid+1; else R=mid; } return -1; } int main() { while(~scanf(%d,&n),n) { for(int i=0;i
     
      =0;index--) { for(int i=0;i