这是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 |
Case #1: -25 |
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()