快速找到和為零的四個數(20)

2021-09-26 22:50:54 字數 987 閱讀 7655

給定四個陣列,a,b,c,d,從每個陣列找出取出乙個元素,使得a+b+c+d=0。問滿足條件的一共有多少組。

輸入樣例 第一行//每組元素的個數 剩下n行 //每組陣列的元素

6    

-45   22   42   -16    

-41  -27  56   30 

-36   53  -37   77 

-36   30  -75  -46 

26  -38  -10   62  

-32  -54   -6   45 

輸出如果只有兩組數,當取出乙個陣列的數值為a,則另一組數中只要有-a即可,因此變成乙個查詢問題。

同樣的,將前兩個數的陣列之和(每個陣列提乙個元素)記為sum1,後兩個陣列之和(每個陣列提乙個元素)記為sum2,當sum2 = -sum1時,則滿足條件。若有重複元素,則沿著陣列計數求出元素的個數即可。

int binsearch(const int t, const int len, int* sum1, int* sum2) //找到了

while (sum2[left] == t && left < len)

return num;

}void test()

int* sum1 = new int[n*n];

int* sum2 = new int[n*n];

int t = 0;

for (i = 0; i < n; i++)

} //將sum1和sum2進行排序

sort(sum1, sum1 + t);

sort(sum2, sum2 + t);

int num = 0;

for (i = t - 1; i >= 0; i--)

num += binsearch(-sum1[i], n*n, sum1, sum2);

cout << num << endl;

}int main()

快速找到和為零的四個數(POJ 3441)

note 1.題目規定a,b,c,d的元素個數 n 4000 則和陣列sum1,sum2要開到16000000,開太小不可以 2.對sum2使用二分查詢,sum2要進行排序,sum1可以不排序。2.在sum2中查詢是否存在 sum1 i 不能僅僅是簡單查詢是否存在,要查詢小於等於或大於等於 sum1...

POJ 二分查詢 快速找到和為零的四個數

定義求和問題如下 給定4組整數a,b,c,d,找到有多少四元組 a,b,c,d a b c d,滿足條件a b c d 0。此問題中,假設a,b,c,d具有相同的大小n。輸入包含多組測試資料。每組測試資料的第一行包含乙個整數n,表示a,b,c,d的元素個數 n 4000 接下來n行每行4個整數,分別...

二分(四個數和為零)

1267 4個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 收藏關注給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出 yes 否則輸出 no input 第1行,1個數n,n為陣列的長度 4 n 1000 第2 n 1行 a i ...