Code Jam - Minimum Scalar Product for Python

来源:互联网 发布:谢晋影视艺术学院 知乎 编辑:程序博客网 时间:2024/04/30 12:56

这是Code Jam 2008, Round 1A的试题

Problem

对于两个矢量v1,v2,scalar product定义为x1y1+x2y2+...+xnyn。假如你现在可以任意改变两个矢量中每个值的位置,要求得到一个能使scalar product最小的情况。

Input

第一行给出test case数量T

对于每个test case,第一行给出矢量的长度n

后两行分别给出v1和v2两个矢量,每一行包括n个整数。

Output

对于每个test case,输出

Case #X: Y

其中X是test case的编号,Y是最小的scalar product

Sample

Input 
 
Output 
 2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1

Case #1: -25
Case #2: 6

源代码:

fin = open('A-large-practice.in', 'r')fout = open('A-large-practice.out', 'w')T = int(fin.readline()) # the number of test casesfor cases in xrange(T):    n = int(fin.readline()) # each vector contains n integers    v1 = map(int, fin.readline().split())    v2 = map(int, fin.readline().split())    sum = 0    for i in xrange(n):        sum += sorted(v1)[i] * sorted(v2)[-i - 1]    fout.write("Case #%d: %d\n" %(cases + 1, sum))    fin.close()fout.close()

观察之后发现,要想得到最小的scalar product,首先用第一行的最大整数乘以第二行的最小整数,再用第一行的第二大整数乘以第二行的第二小整数,以此类推。得到方法之后,程序的实现并不复杂。

0 0
原创粉丝点击