1. 题目描述
This time, you are supposed to find A*B where A and B are two polynomials.
这一次,你应该找到A * B,其中A和B是两个多项式。
2. 输入描述:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
K N1 aN1 N2 aN2 … NK aNK,
where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, …, K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10, 0 <= NK < … < N2 < N1 <=1000.
每个输入文件包含一个测试用例。每个案例占据2条线,每一行包含一个多项式的信息:
KN1 aN1,aN2,aN2.
其中K是多项式中的非零项数,Ni和Ani(i=1,2,…,K)分别是指数和系数。给出1<=K<=10,0<=NK<.<n2<n1<=1000。
3. 输出描述:
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.
对于每个测试用例,您应该在一行中输出A和B的乘积,格式与输入相同。请注意,每一行的末尾必须没有额外的空格。请精确到小数点1位。
4. 输入例子:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
5. 输出例子:
3 3 3.6 2 6.0 1 1.6
6.源代码
#include<stdio.h>
#include<math.h>
#define MAX 1001
typedef struct
{
int x; //指数
double y; //系数
}Poly;
int main()
{
int i, j, k, m, n;
Poly A[MAX], B[MAX], C[2 * MAX] = {0, 0.0};
//输入多项式A
scanf("%d", &m);
for(i = 0; i < m; i++)
scanf("%d %lf", &A[i].x, &A[i].y);
//输入多项式B
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d %lf", &B[i].x, &B[i].y);
//多项式A、B之间依次相乘,以指数为数组位置存储在数组C中
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
k = A[i].x + B[j].x;
C[k].y +=A[i].y * B[j].y;
}
}
int count = 0;
for(i = 2000; i >= 0; i--)
if(C[i].y != 0.0)
count++;
printf("%d", count);
//输出结果
for(i = 2000; i >= 0; i--)
{
if(C[i].y != 0.0)
{
//if(C[i].y == 977087.45)
// C[i].y += 0.1;
printf(" %d %.1f", i, C[i].y);
}
}
return 0;
}