![]()
1 #include<stdio.h>
2 #define MAXN 2010
3 struct poly{
4 int exp,var;
5 };
6 struct poly a[MAXN],b[MAXN],c[MAXN];
7 void read(struct poly a[]);
8 void multiply();
9 void add();
10 int main(){
11 int n,i;
12 read(a);
13 read(b);
14
15 multiply();
16 for(i=0;i<MAXN;i++){
17 c[i].exp = 0;
18 c[i].var = 0;
19 }
20 add();
21 return 0;
22 }
23
24 void read(struct poly a[]){
25 int i,n;
26 scanf("%d",&n);
27 a[0].exp = n;
28 for(i=1;i<=n;i++){
29 scanf("%d %d",&a[i].var,&a[i].exp);
30 }
31 }
32 void multiply(){
33 int i,n,j,flag=0,k,count=0;
34 int e;
35 int v;
36
37 count=1;
38 for(i=1;i<=b[0].exp;i++){
39 e = a[1].exp + b[i].exp;
40 v = a[1].var * b[i].var;
41 if(v!=0){
42 c[count].exp = e;
43 c[count].var = v;
44 count++;
45 }
46 }
47 c[0].exp = count-1;
48 for(j=2;j<=a[0].exp;j++){
49 for(i=1;i<=b[0].exp;i++){
50 flag = 0;
51 e = a[j].exp + b[i].exp;
52 v = a[j].var * b[i].var;
53 if(v!=0){
54 for(k=1;k<=c[0].exp;k++){
55 if(c[k].exp==e){
56 flag = 1;
57 c[k].var += v;
58 }
59 }
60 if(flag==0){
61 c[0].exp++;
62 c[c[0].exp].exp = e;
63 c[c[0].exp].var = v;
64 }
65 }
66 }
67 }
68 count = 0;
69 for(i=1;i<=c[0].exp;i++){
70 count=i;
71 for(j=i;j<=c[0].exp;j++){
72 if(c[count].exp < c[j].exp) count=j;
73 }
74 if(count!=i){
75 e = c[i].exp;
76 c[i].exp = c[count].exp;
77 c[count].exp = e;
78
79 v = c[i].var;
80 c[i].var = c[count].var;
81 c[count].var = v;
82 }
83 }
84
85 if(c[0].exp==0) printf("0 0");
86 else{
87 for(i=1;i<=c[0].exp;i++){
88 if(c[i].var!=0) {
89 printf("%d %d",c[i].var,c[i].exp);
90 if(i!=c[0].exp) printf(" ");
91 }
92 }
93 }
94 printf("\n");
95 }
96 void add(){
97 int i,j,count=0;
98 int v;
99 i=1;
100 j=1;
101 while(i<=a[0].exp && j<=b[0].exp){
102 if(a[i].exp > b[j].exp){
103 count++;
104 c[count].exp = a[i].exp;
105 c[count].var = a[i].var;
106 i++;
107 }
108 else if(a[i].exp == b[j].exp){
109 v = a[i].var + b[j].var;
110 if(v!=0){
111 count++;
112 c[count].exp = a[i].exp;
113 c[count].var = v;
114 }
115 i++;j++;
116 }
117 else{
118 count++;
119 c[count].exp = b[j].exp;
120 c[count].var = b[j].var;
121 j++;
122 }
123 }
124 while(i<=a[0].exp){
125 count++;
126 c[count].exp = a[i].exp;
127 c[count].var = a[i].var;
128 i++;
129 }
130 while(j<=b[0].exp){
131 count++;
132 c[count].exp = b[j].exp;
133 c[count].var = b[j].var;
134 j++;
135 }
136 c[0].exp = count;
137 if(c[0].exp==0) printf("0 0");
138 else{
139 for(i=1;i<=c[0].exp;i++){
140 printf("%d %d",c[i].var,c[i].exp);
141 if(i!=c[0].exp) printf(" ");
142 }
143 }
144 printf("\n");
145
146
147 }