这个就是用数组模拟一下,下标的方式,表示对应的指数,然后记得要以指数递减的方式输出一下
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <math.h>
#include <stack>
#include <utility>
#include <string>
#include <sstream>
#include <cstdlib>
#include <set>
#define LL long long
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 10000 + 10;
int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
int a[maxn],b[maxn];
int f[maxn];
void print()
{
int flag = 0;
for(int i = maxn;i >= 0;i--)
{
if(f[i])
{
if(flag) putchar(' ');
printf("%d %d",f[i],i);
flag++;
}
}
if(!flag)
{
printf("0 0");
}
printf("\n");
}
int main()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(f,0,sizeof(f));
int m,n;
scanf("%d",&m);
for(int i = 0; i < m; i++)
{
int x,y;
scanf("%d %d",&x,&y);
a[y]+=x;
}
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
int x,y;
scanf("%d %d",&x,&y);
b[y]+=x;
}
for(int i = maxn; i >= 0; i--)
{
if(a[i])
{
for(int j = 0; j < maxn; j++)
{
if(b[j])
{
f[i+j] += a[i]*b[j];
}
}
}
}
print();
memset(f,0,sizeof(f));
for(int i = maxn;i >= 0;i--)
{
if(a[i])
{
f[i] += a[i];
}
}
for(int i = 0;i < maxn;i++)
{
if(b[i])
{
f[i] += b[i];
}
}
print();
return 0;
}