设计函数分别求两个一元多项式的乘积与和。
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 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; }
