題目詳情
兩個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的點積變小。注意排序的時候用點高效的排序算法(俺的教訓呀,
你也一樣犯了錯嗎?),我用的是計數排序。
代碼如下: