您的位置:首页 > 其它

PTA 一元多项式的乘法与加法运算

2017-03-10 18:29 423 查看
设计函数分别求两个一元多项式的乘积与和。


输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。


输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出
0
0


输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1


输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0


#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <stack>
#include <map>
#include <climits>
#include <functional>

using namespace std;

#define LL long long
const int INF=0x3f3f3f3f;

int a[2005];
int b[4005];
struct node
{
int x,y;
} c[1005],d[1005];
int n,m;

int main()
{
while(~scanf("%d",&n))
{
for(int i=1; i<=n; i++)
scanf("%d%d",&c[i].x,&c[i].y);
scanf("%d",&m);
for(int i=1; i<=m; i++)
scanf("%d%d",&d[i].x,&d[i].y);
memset(a,0,sizeof a);
memset(b,0,sizeof b);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
b[c[i].y+1000+d[j].y+1000]+=c[i].x*d[j].x;
}
int flag=0;
int cnt=0;
for(int i=4003; i>=0; i--)
{
if(b[i])
{
if(!cnt) printf("%d %d",b[i],i-2000);
else printf(" %d %d",b[i],i-2000);
cnt++;
flag=1;
}
}
if(!flag) printf("0 0");
printf("\n");
for(int i=1; i<=n; i++)
a[c[i].y+1000]+=c[i].x;
for(int i=1; i<=m; i++)
a[d[i].y+1000]+=d[i].x;
flag=0;
cnt=0;
for(int i=2002; i>=0; i--)
{
if(a[i])
{
if(!cnt) printf("%d %d",a[i],i-1000);
else printf(" %d %d",a[i],i-1000);
cnt++;
flag=1;
}
}
if(!flag) printf("0 0");
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: