week4 二分 四個數列

2021-10-04 03:20:17 字數 1285 閱讀 9991

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

當乙個數列中有多個相同的數字的時候,把它們當做不同的數對待。

input:第一行:n(代表數列中數字的個數) (1≤n≤4000)

接下來的 n 行中,第 i 行有四個數字,分別表示數列 a,b,c,d 中的第 i 個數字(數字不超過 2 的 28 次方)

output:輸出不同組合的個數。

樣例

input:

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

output:

5分析:暴力列舉abcd中的每個數,四重迴圈,時間複雜度為o(pow(n,4))

總結:使用二分法時注意迴圈的控制條件,以及找到對應位置的判斷條件。

#include

#include

#define range 4010

using namespace std;

int a[range]

, b[range]

, c[range]

, d[range]

;int sumab[range * range]

, sumcd[range * range]

;int n =

0, index =

0, start =

0, ans =

0, low =

0, high =

0, i =

0, j =0;

void

makesum()

}sort

(sumab, sumab + index);}

void

fun(

int i)

else low = mid +1;

}for

(j = start; j < index && sumab[j]

+ sumcd[i]==0

; j++

) ans++;}

intmain()

cout << ans;

}

week4 作業B 四個數列

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

week4作業 B 四個數列

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

week4作業題 B 四個數列

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