Code Jam - Minimum Scalar Product for Python

这是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 cases
for 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,首先用第一行的最大整数乘以第二行的最小整数,再用第一行的第二大整数乘以第二行的第二小整数,以此类推。得到方法之后,程序的实现并不复杂。

你可能感兴趣的:(python,Codejam)