题目大意:给出两个多项式A B,计算 A*B的结果,并以(指数,系数)对的方式输出。
与 PATA1002 计算两个多项式的和类似,用map<int, double, greater<int>>来按降幂存储多项式A,然后在输入多项式B的同时进行计算。由于是乘法,多项式B的每一项都要与A的所有项相乘,因此另外设置一个map来存放结果多项式。最后遍历结果多项式,并输出非零项。
AC代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<int, double, greater<int>> mp, ans;
int K, N;
double a;
scanf("%d", &K);
int cnt = 0;
for (int i = 0; i < K; ++i)
{
scanf("%d%lf", &N, &a);
mp[N] = a;
}
scanf("%d", &K);
for (int i = 0; i < K; ++i)
{
scanf("%d%lf", &N, &a);
for(map<int, double>::iterator it = mp.begin(); it != mp.end(); it++)
{
ans[it->first + N] += a * it->second;
}
}
for(map<int,double>::iterator it = ans.begin(); it != ans.end(); it++)
{
if(it->second != 0) cnt++;
}
printf("%d", cnt);
for(map<int,double>::iterator it = ans.begin(); it != ans.end(); it++)
{
if(it->second != 0)
{
printf(" %d %.1f", it->first, it->second);
}
}
return 0;
}