這道題原本老師說是雜湊的練習題,結果發現雜湊的**量忒大,然後就用二分了。
有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小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...