poj2785 二分查詢

2021-08-22 18:02:20 字數 653 閱讀 8821

題目大意:給定n行數(n<=4000),每行4個數。從這4列中,每列選擇乙個數使其和為0

暴力列舉 o(n^4)會tle。

優化:列舉第1,2列算出總和s1,列舉第3,4列算出總和s2。然後列舉s1,在s2中二分查詢等於-s1的數即可 o(n^2log(n^2))

第一次wa:沒有認識到,s2陣列中有相同的數,所以找到乙個就++ans。

正解:在s2中找到第乙個》key的位置pos1,再找到第乙個》=key的位置pos2,則ans+=(pos1-pos2);

#include 

#include

using

namespace

std;

const

int n = 4e3+5;

const

int m = 16e6+5;

int a[5][n];

int s1[m],s2[m];

int n;

int upper_find(int l, int r, int key)

return r+1;

}int lower_find(int l, int r, int key)

return r+1;

}int main()

poj 2785 折半列舉 二分搜尋

傳送門 problem 2785 題意 給定 n 行數,每行都有 4 個數a,b,c,d。要從每列中各抽取出乙個數,問使四個數的和為0的所有方案數。相同數字不同位置當作不同數字對待。題解 如果採用暴力的話,從4個數列中選擇數組合,共有 n 4 種選擇,故時間複雜度為o n 4 指定會超時。但,如果將...

poj2785 折半列舉 挑戰程式設計競賽

2018 1 10 這道題目如果直接列舉的話,需要我們o n 4 的複雜度,但是我們如果用二分搜尋的話,可以加快我們的求解。由題意可以得知,我們要求出滿足a b c d 0的所有情況,那麼可以轉換為a b c d,假設我們可以求出的c d的大小,那麼我們可以求出a b的大小組成的陣列,排序後找出所有...

poj 3122 二分查詢

鏈結 poj 3122 題意 我生日派對時,準備了n個圓柱形的pie,半徑比一定相同,但高都為1,邀請了f個朋友,加上自己一共f 1人,需要將n個pie分給f 1個人 要求 每個人分得的pie尺寸要一樣大,並且同乙個人所分的pie要是從同乙個pie上得到的,n個pie分完後可以有剩餘 求 每個人最多...