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

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++的解法,采用数组代替字典来存储,结果就通过了。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值