正文

Zju 1101 Gamblers2006-07-30 23:41:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/17025.html

分享到:

最简单的bsearch,然而我wa了无数次.......最晕的一次是输错数了-_-

ps:两个小循环要全部遍历。因为有可能是14,0,-2,-16这样的情况。

1986516 2006-07-30 23:28:21 Accepted 1101 C++ 00:00.10 444K St.Crux

 

#include <stdio.h>
#include <stdlib.h>

int a[1000], n, wi, wj, wk, wu;

int comp(const void *a, const void *b)
{
    int aa = *(int*)a, bb = *(int*)b;
    return aa > bb;
}

int main()

 //freopen("in.txt", "r", stdin);
 while(scanf("%d", &n) && n)
 {
  int i, k, j, u;
  for(i = 0; i < n; i ++)
   scanf("%d", &a[i]);
  qsort(a, n, sizeof(int), comp);
  wi = 536870912;
  if(n < 4)
   goto out;
  //o(n^3 * logn)
  for(i = n - 1; i >= 0; i --)
  {
   for(k = n - 1; k >= 0; k --)
   {  
    if(i == k) continue;
    for(j = k - 1; j > 0; j --)
    {
     if(j == i) continue;
     u = a[i] - a[k] - a[j];
     if(u != a[i] && u != a[k] && u != a[j])
     {
      //if not equivalent then begin binary search
      int h = n - 1, l = 0, mid;
      while(l <= h)
      {
       mid = (h + l) / 2;
       if(u > a[mid]) l = mid + 1;
       else if(u < a[mid]) h = mid - 1;
       else if(u == a[mid])
       {
        wi = a[i], wk = a[k], wj = a[j], wu = u;
        goto out;
       }      
      }
     }
    }
   }
  }
out: if(wi == 536870912)
   printf("no solution\n");
  else
   //printf("%d %d %d %d\n", wi, wk, wj, wu);
   printf("%d\n", wi);
 }
 return 0;
}

 

阅读(3710) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册