• google code jam exercise——Minimum Scalar Product


    继续Python练习。这次的题很简单的。

    这次的题是Minimum Scalar Product,大概意思是给你两个数组va和vb,两个数组的元素对应相乘,然后求和,要求和最小,在数组元素顺序可以调整的时候。

    这里主要用到一个不等式,x和y两个升序的数组,那么sum(x[i]*y[i])>=sum(x[i]*y[n-i]),这个不等式在元素中有负数时也是成立的,所以问题的解法就很直接了。

    Python里面可以直接调用sort和reverse函数,先将两个数组va和vb排序,然后将其中一个reverse一下,在把元素对应相乘,就得到最小值了。

    代码如下:

    #!/usr/bin/python
    #
    encoding:UTF-8
    #
    Filename:MinimumScalarProduct.py

    import sys

    inname = "input.txt"
    outname = "output.txt"
    if len(sys.argv)>1:
    inname = sys.argv[1]
    outname = inname.rstrip(".in")
    outname = outname + ".out"

    testCaseNum = 0
    fin = open(inname,"r")
    line = fin.readline()
    testCaseNum = int(line)

    fout = open(outname,"w")
    caseNum = 0

    for caseNum in range(testCaseNum):
    line = fin.readline()
    vectorLen = int(line)
    line = fin.readline()
    va = [int(val) for val in line.split()]
    line = fin.readline()
    vb = [int(val) for val in line.split()]
    va.sort()
    vb.sort()
    vb.reverse()
    sp = 0
    for j in range(vectorLen):
    sp = sp + va[j] * vb[j]
    answer = "Case #%d: %d\n" %(caseNum+1,sp)
    fout.write(answer)

    fin.close()
    fout.close()



  • 相关阅读:
    单链表的学习
    数据库连接
    Oracle学习指南
    Java登录第一版
    LeetCode(141): Linked List Cycle
    LeetCode(24): Swap Nodes in Pairs
    LeetCode(2):Add Two Numbers
    LeetCode(83):Remove Duplicates from Sorted List
    LeetCode(21):Merge Two Sorted Lists
    LeetCode(234):Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/Frandy/p/google_code_jam_minimum_scalar_product_python.html
Copyright © 2020-2023  润新知