[PYTHON](PAT)1009 PRODUCT OF POLYNOMIALS (25)

版权声明:首发于 www.amoshuang.com https://blog.csdn.net/qq_35499060/article/details/82050935

This time, you are supposed to find A*B where A and B are two polynomials.

Input Specification:

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 a~N1~ N2 a~N2~ … NK a~NK~, where K is the number of nonzero terms in the polynomial, Ni and a~Ni~ (i=1, 2, …, K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10, 0 <= NK < … < N2 < N1 <=1000.

Output Specification:

For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.

Sample Input

2 1 2.4 0 3.2

2 2 1.5 1 0.5

Sample Output

3 3 3.6 2 6.0 1 1.6

题目大意

给定两个多项式,求多项式的乘积

分析

获取两个多项式的信息,用字典进行存储,键为多项式的指数,值为多项式的系数。

然后遍历两个字典,键相加,值相乘,保存在result字典/数组中。

输出答案

Python实现(版本1)

if __name__ == "__main__":

    line=input().split(" ")

    num=int(line[0])

    dic1={}

    for x in range(num):

        dic1[int(line[2 * x+1])] = float(line[2*x+2])

    line=input().split(" ")

    num=int(line[0])

    dic2={}

    for x in range(num):

        dic2[int(line[2 * x+1])] = float(line[2*x+2])

    dic1 = {key:value for key,value in dic1.items() if value!=0}

    dic2 = {key:value for key,value in dic2.items() if value!=0}

    result = {}

    for x in dic1:

        for i in dic2:

            try:

                result[x+i] += dic1[x]*dic2[i]

            except:

                result[x+i] = dic1[x]*dic2[i]

    keys = sorted(result.keys(), key=lambda x:-x)

    output = str(len(keys)) + " "

    for x in keys:

        output = output + str(x)+" "+ "{:.1f}" .format(result[x])+" "

    print(output[:-1])

使用这个实现的话,测试点1过不去

Python实现(版本2)

if __name__ == "__main__":

    line=input().split(" ")

    num=int(line[0])

    dic1={}

    for x in range(num):

        dic1[int(line[2 * x+1])] = float(line[2*x+2])

    line=input().split(" ")

    num=int(line[0])

    dic2={}

    for x in range(num):

        dic2[int(line[2 * x+1])] = float(line[2*x+2])

    dic1 = {key:value for key,value in dic1.items() if value!=0}

    dic2 = {key:value for key,value in dic2.items() if value!=0}

    result = [[x,0] for x in range(2001)]

    for x in dic1:

        for i in dic2:

            result[x+i][1] += dic1[x]*dic2[i]

    output = str(len([x for x in result if x[1] !=0]))+" "

    for x in result[::-1]:

        if x[1]!=0:

            output = output + str(x[0])+" "+ "{:.1f}" .format(x[1])+" "

    print(output[:-1])

这个实现借鉴了C++的解法,采用数组代替字典来存储,结果就通过了。

待以后有时间了,可以琢磨一下测试点一到底是什么。

更多技术干货,有趣文章,点这里就对了

猜你喜欢

转载自blog.csdn.net/qq_35499060/article/details/82050935