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++的解法,采用数组代替字典来存储,结果就通过了。
待以后有时间了,可以琢磨一下测试点一到底是什么。