B 4個數列 二分法

2021-10-04 03:55:29 字數 1018 閱讀 8156

zjm 有四個數列 a,b,c,d,每個數列都有 n 個數字。zjm 從每個數列中各取出乙個數,他想知道有多少種方案使得 4 個數的和為 0。

對於四個數列之和,最暴力的想法就是列舉四個數列的數,那樣時間複雜度是o(n^4)顯然複雜度太高了。

我們的思路是,計算a+b的和 o(n*n)存放在陣列a裡面(排序),然後再計算c+d的和bi,對於每個計算出來的和bi,我們使用二分查詢的方法,從陣列a裡面尋找有幾個bi的相反數。

在這裡需要注意的是,對於bi可能在a+b的和當中有多個它的相反數,哪門我們二分查詢的時候是查詢第乙個=bi的位置l,和最後乙個=bi的位置r。最後結果就是r-l+1。

#include

#include

using

namespace std;

/*首先用陣列a【】記錄a+b每個元素的組合之和4000*4000;對陣列a進行排序

然後計算每個c+d的組合之和,查詢a中是否有相反數*/

int n,a[

25000000];

int a[

5000

],b[

5000

],c[

5000

],d[

5000];

intbinaryfind1

(int pan)

//第乙個位置

else

if(a[mid]

else r=mid-1;

}//mid是符合條件的乙個點

return ans;

}int

binaryfind2

(int pan)

//最後乙個位置

else

if(a[mid]

else r=mid-1;

}//mid是符合條件的乙個點

return ans;

}int

main()

printf

("%d\n"

,count)

;}

四個數列(二分法)

一 題目描述 zjm 有四個數列 a,b,c,d,每個數列都有 n 個數字。zjm 從每個數列中各取出乙個數,他想知道有多少種方案使得 4 個數的和為 0。當乙個數列中有多個相同的數字的時候,把它們當做不同的數對待。請你幫幫他吧!input 第一行 n 代表數列中數字的個數 1 n 4000 接下來...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...