題目大意:給定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分完後可以有剩餘 求 每個人最多...