最小向量乘积

题目详情

两个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的点积变小。注意排序的时候用点高效的排序算法(俺的教训呀,

你也一样犯了错吗?),我用的是计数排序。


代码如下:



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