艰难的英语单词:
polynomial 英 [ˌpɒlɪ'nəʊmɪəl] 多项式 n.
exponents 英 [ɪks'pəʊnənts] 指数 n.
coefficients 英 [kəʊɪ'fɪʃənts] 系数 n. (呵呵,再次遇见还是不认识)
题意:给两个多项式,输出乘积
难点:和前面的1002的多项式和差不多,稍微改一下就行。。。但是要注意的是,题目说的指数幂次小于等于1000,也就是最大2000,不是输入的位数
Code:
主要的办法还是用“桶”,清晰快捷。输入输出都用桶。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define inf 1009
#define INF 0x3f3f3f3f
#define loop(x,y,z) for(x=y;x<z;x++)
double num1[inf];
double num2[inf];
double ans[2*inf];
int n1,n2;
void Input()
{
int i;
scanf("%d",&n1);
loop(i,0,n1)
{
int v;
double u;
scanf("%d %lf",&v,&u);
num1[v]+=u;
}
scanf("%d",&n2);
loop(i,0,n2)
{
int v;
double u;
scanf("%d %lf",&v,&u);
num2[v]+=u;
}
}
void Solve()//多项式乘法
{
int i,j;
loop(i,0,inf)
loop(j,0,inf)
ans[i+j]+=num1[i]*num2[j];
}
void Output()
{
int i;
int sum=0;
loop(i,0,2*inf)//注意这里是2*1000
if(ans[i])sum++;
printf("%d",sum);
for(i=2*inf;i>=0;i--)//输出的结果也要是2*1000
if(ans[i])
printf(" %d %.1f",i,ans[i]);
printf("\n");
}
int main()
{
Input();
Solve();
Output();
return 0;
}