ZJU 1101 Gamblers

原创 2006年05月21日 01:24:00

I had got WA many times!!

useful test data:

4
10 9 3 -2
4
10 9 3 -4
4
10 9 3 -16

output should be 10, 9, 3 as squence.

//////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream.h>
#include <string.h>
#include <stdlib.h>

#define MAX 1005
int wager[MAX] ;

int cmp ( const void* a, const void* b )
{
 return *(int*)a - *(int*)b ;
}

bool BinarySearch ( int beg, int end, int value )
{
 int mid ;
 while ( beg <= end )
 {
  mid = ( beg + end ) / 2 ;
  if ( wager[mid] > value )
   end = mid-1 ;
  else if ( wager[mid] < value )
   beg = mid+1 ;
  else
   return true ;
 }
 return false ;
}

/*
// this is true also
bool BinarySearch ( int beg, int end, int value )
{
 if ( beg > end )
  return false ;
 int mid = ( beg + end ) / 2 ;
 if ( wager[mid] > value )
  return BinarySearch ( beg, mid-1, value ) ;
 else if ( wager[mid] < value )
  return BinarySearch ( mid+1, end, value ) ;
 return true ;
}*/

int main()
{
 int n ;
 while ( cin >> n && n )
 {
  int i, j, k, cur ;
  for ( i = 0; i < n; i++ )
   cin >> wager[i] ;

  if ( n < 4 )
  {
   cout << "no solution" << endl ;
   continue ;
  }
  qsort ( wager, n, sizeof(int), cmp ) ;
  
  bool isFind = false ;
  for ( i = n-1; i >= 0; i-- )
  {
   for ( j = n-1; j >= 0; j-- )
   {
    if ( j == i || wager[j]+wager[0]+wager[1] > wager[i] )
     continue ;
    for ( k = j-1; k >= 0; k-- )
    {
     if ( k == i )
      continue ;
     cur = wager[i] - wager[j] - wager[k] ;
     if ( BinarySearch ( 0, k-1, cur ) )
     {
      isFind = true ; 
      break ;
     }
    }
    if ( isFind )
     break ;
   }
   if ( isFind )
    break ;
  }
  if ( isFind )
   cout << wager[i] << endl ;
  else
   cout << "no solution" << endl ;
 }
 return 0 ;
}

相关文章推荐

1101 Gamblers

找一个最大的数,这个数是由这个数等于所在的序列中的某三个数的和。 第一种方法,我是用深度优先搜索来做的,但是返回的结果是超时;但是现在还不知道这个程序为什么超时,希望路过的各位指出程序的不足之处。 ...

ZOJ 1101 Gamblers

刚看到这道题,很自然的想到了三重循环,但是时间复杂度很大,显然超时。。。 假设 d = x + y + z , z转换成 x + y = d - z ,再 查找x、y、d、z的下标(各不相等)。这样...
  • Wss0130
  • Wss0130
  • 2012年08月18日 08:24
  • 223

zoj 1101 Gamblers

排序,二分检索,从最大的开始找~~就OK啦。。注意goto跳出循环哦· #include #include #include #include #include us...
  • zxc701
  • zxc701
  • 2011年08月09日 10:49
  • 249

ZOJ 1101 Gamblers 二分

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

ZOJ 1101Gamblers

简单题,只要四重循环就能完成,虽然很慢。没有考虑到wager还可以是负数,所以循环做了限制,后来去掉了。find()函数不会用,就自己写了一个简单的。 //1101Gamblers #i...

zoj 1101Gamblers排序,搜索

应该是2点开始看这道题吧,现在5点,刚好用了3个小时,期间,整理了一下快速排序的具体代码,然后,思考这道题怎样搜索出答案。。。。。一次WA,然后就AC了,还行吧,虽然在别人看来会很差。。。。 自己写的...

zoj Gamblers(hash)

题意:给你n个数,其中三个加起来等于得数也在n个数里面,就输出这个数。如果有多个,就输出最大那个。n...

ACM ZJU 1789 Suspects

  • 2012年11月11日 13:58
  • 32KB
  • 下载

[BZOJ 1101] POI 2007 Zap · 莫比乌斯 & 分块 超详细题解

初学莫比乌斯反演,翻了大量的题解才搞懂这题,所以决定自己写一个最详细的题解,虽然有些繁琐,但是每一步推导都十分详细。神犇就不要嘲讽我了2333 首先,我们定义 题目即要求 由于d是给定的,所以另 ...
  • ycdfhhc
  • ycdfhhc
  • 2016年02月05日 11:12
  • 858
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZJU 1101 Gamblers
举报原因:
原因补充:

(最多只允许输入30个字)