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

2021-08-04 19:13:34 字數 1102 閱讀 9939

time limit: 1 sec memory limit: 32 mb

有n個賭徒打算賭一局。規則是:

每人下乙個賭注,賭注為非負整數,且任意兩個賭注都不相同。勝者為賭注恰好是其餘任意三個人的賭注之和的那個人。如果有多個勝者,我們取賭注最大的那個為最終勝者。

例如,a,b,c,d,e分別下賭注為2、3、5、7、12,最終勝者是e,因為12=2+3+7。

輸入包含多組測試資料。每組首先輸入乙個整數n(1<=n<=1000),表示賭徒的個數。

接下來n行每行輸入乙個非負整數b(0<=b<32768),表示每個賭徒下的賭注。

當n=0時,輸入結束。

對於每組輸入,輸出最終勝者的賭注,如果沒有勝者,則輸出no solution。

sample input 5

2 3

5 7

12 5

2 16

64 256

1024 0

12no solution

二分查詢,暴力求解

本題關鍵是對所有可能情況的暴力列舉,盡可能的優化**減少不必要的計算。

首先,將賭注排序,題目要找可能的最大解,故和賭注 i 應該從後往前列舉。

(注:此處的 i ,j,k,t 都指的是排序後的位置。)

接下來分別是三人各自的賭注,我們可以把它分為較小的賭注 j,較中間的賭注 k,較大的賭注 t 三部分。

較小的應小於中間的 j+1<=k 中間的應小於較大的 k+1<=t

我們用三重迴圈組合 i,j,k ,用減法求出 「準 t」 看是否能在k+1~n之中找到它即可。

#include #include #include #include #include using namespace std;

int n,t,ans;

int a[1005];

//二分查詢位置

int bin(int l,int h,int k)}}

}}int main()

sort(a,a+n);

ans=0;

find();

if(ans)

else

}return 0;

}

ZOJ1101 賭徒 二分查詢

這道題原本老師說是雜湊的練習題,結果發現雜湊的 量忒大,然後就用二分了。有n個賭徒,如果乙個賭徒的錢數是其中三個的和那麼這個賭徒是贏家,輸出最多錢的贏家。輸入乙個整數n 1 n 1000 表示有n個賭徒。接下去n行各自輸入乙個整數 x 536870912 輸出每組測試資料的結果。如果沒有勝者則輸出 ...

暴力高階,有序二分暴力

include include includeusing namespace std typedef long long ll const int n 1e5 int a n 100 int f int mid,int n printf mid d num d n mid,num return nu...

暴力 二分答案 JZOJ 蛋糕

有乙個n m n mn m的蛋糕 有數字 橫著切三刀在豎著切三刀分成16份使最小的最大。首先 最小的最大 確定了這題可以二分答案 這題我們先暴枚豎切三刀,再二分判定 include include include using namespace std int n,m,rr,ans,l,r int ...