ZOJ1101 賭徒 二分查詢

2021-08-16 08:33:26 字數 1035 閱讀 8265

這道題原本老師說是雜湊的練習題,結果發現雜湊的**量忒大,然後就用二分了。

有n個賭徒,如果乙個賭徒的錢數是其中三個的和那麼這個賭徒是贏家,輸出最多錢的贏家。

輸入乙個整數n (1<=n<=1000)表示有n個賭徒。

接下去n行各自輸入乙個整數 x (-536870912

輸出每組測試資料的結果。如果沒有勝者則輸出」no solution」.

5 2

3 5

7 12

5 2

16 64

256

1024

012

no solution

將4重迴圈分成兩段,變為兩個二重迴圈。第乙個二重迴圈把所有值記錄下來,然後第二個二重迴圈中用二分查詢合適的答案。注意由於可能有多組答案相等的資料,由於需要其中去重的性質,所有雜湊很麻煩。

#include

#include

#include

using namespace std;

int n,a[1001],s,len,wz;

struct hehe;//結構體

hehe sum[1000006];

bool f;

int find(int x)//二分查詢

if (sum[mid].c1;

else r=mid-1;

}return -1;

}bool cmp(hehe x,hehe y)

sort(a+1,a+1+n);//排序,後面有用

for (int i=1;ifor (int j=i+1;j<=n;j++)

}sort(sum+1,sum+1+len,cmp);

for (int i=n;i>=1;i--)

wz++;

}if (f) break;

}if (f) break;

}if (f) printf("%d\n",s);

else printf("no solution\n");//輸出

}}

zoj 1101 二分搜尋

感覺時間複雜度還是太高了,一開始自己寫了個二分搜尋。比stl裡的要慢個幾毫秒。可能是資料量太少了,體現不出來。if 1 include include include include using namespace std define my max 1001 long dight my max i...

TK題庫 1097 賭徒(暴力 二分)

time limit 1 sec memory limit 32 mb 有n個賭徒打算賭一局。規則是 每人下乙個賭注,賭注為非負整數,且任意兩個賭注都不相同。勝者為賭注恰好是其餘任意三個人的賭注之和的那個人。如果有多個勝者,我們取賭注最大的那個為最終勝者。例如,a,b,c,d,e分別下賭注為2 3 ...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...