最小向量乘積

題目詳情

兩個N維向量的點積定義爲,對應維度上的數的乘積之和。

兩個三維向量[1, 3, −5]和[4, −2, −1]的點積是1 * 4 + 3 * (-2) + (-5) * (-1) = 3

現在允許我們對兩個向量裏的維度重新排列,讓點積儘可能小。

例如上述兩個向量,我們可以調整維[3,1,-5]和[-2,-1,4],點積是-27。

輸入格式:

多組數據,每組數據第一行是一個整數n,表示向量的維數。1<=n<=100000。

下面兩行,每行是n個空格分隔的整數表示兩個n維向量,每一維的範圍都是[-1000000,+1000000]之間。

輸出格式:

對於每組數據,輸出一行,包含一個整數,代表可以調整到的最小的點積。



答題說明

輸入樣例

3

3 1 -5

-2 -1 4

輸出樣例:

-27


思路: 假設向量分別爲數組a和數組b,先對a進行從小到大的排序,然後假設有b[i] < b[j] (i < j), 那麼可以通過交換

b[i]與b[j]使a[i]*b[i]+a[j]*b[j]的值變小,從而a與b的點積變小。注意排序的時候用點高效的排序算法(俺的教訓呀,

你也一樣犯了錯嗎?),我用的是計數排序。


代碼如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章