fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct Node{
  5. int coef;
  6. int exp;
  7. struct Node *next;
  8. }Node;
  9. int cnt = 0;
  10.  
  11. Node* getNode();
  12.  
  13. void freeNode(Node* node) {
  14. free(node);
  15. cnt--;
  16. }
  17.  
  18. Node* appendTerm(Node *, int, int);
  19.  
  20. Node* addPoly(Node *, Node *);
  21.  
  22. Node* ProNode(Node *, Node *);
  23.  
  24. Node* ProPoly(Node *, Node *);
  25.  
  26. int main(){
  27. Node *fst, *snd, *rs, *p, *tmp;
  28. fst = getNode();
  29. fst->next = NULL;
  30. snd = getNode();
  31. snd->next = NULL;
  32. int fc,sc,c,e;
  33. scanf("%d",&fc);
  34. p = fst;
  35. for(int i=0; i<fc; i++)
  36. {
  37. scanf("%d %d",&c,&e);
  38. p = appendTerm(p,c,e);
  39. }
  40. scanf("%d",&sc);
  41. p = snd;
  42. for(int i=0; i<sc; i++)
  43. {
  44. scanf("%d %d",&c,&e);
  45. p = appendTerm(p,c,e);
  46. }
  47. rs = ProPoly(fst,snd);
  48. for(p=rs->next; p!=NULL; p=p->next)
  49. {
  50. printf(" %d %d", p->coef, p->exp);
  51. }
  52. printf("\n%d", cnt);
  53. for(p=fst; p!=NULL;)
  54. {
  55. tmp = p;
  56. p = p->next;
  57. freeNode(tmp);
  58. }
  59. for(p=snd; p!=NULL;)
  60. {
  61. tmp = p;
  62. p = p->next;
  63. freeNode(tmp);
  64. }
  65. for(p=rs; p!=NULL;)
  66. {
  67. tmp = p;
  68. p = p->next;
  69. freeNode(tmp);
  70. }
  71. printf("\n%d", cnt);
  72. return 0;
  73. }
  74.  
  75. Node* getNode(){
  76. cnt++;
  77. Node *New;
  78. New = (Node *) malloc(sizeof(Node));
  79. return New;
  80. }
  81.  
  82. Node* appendTerm(Node *p, int c, int e){
  83. Node *tmp;
  84. tmp = getNode();
  85. tmp->coef = c;
  86. tmp->exp = e;
  87. tmp->next = NULL;
  88. p->next = tmp;
  89. p = p->next;
  90. return p;
  91. }
  92.  
  93. Node* addPoly(Node *fst, Node *snd){
  94. Node *rs,*k,*i,*j;
  95. int sum;
  96. rs = getNode();
  97. rs->next = NULL;
  98. k = rs;
  99. i = fst->next;
  100. j = snd->next;
  101. while(i!=NULL && j!=NULL)
  102. {
  103. if(i->exp > j->exp)
  104. {
  105. k = appendTerm(k,i->coef,i->exp);
  106. i = i->next;
  107. }
  108. else if(j->exp > i->exp)
  109. {
  110. k = appendTerm(k,j->coef,j->exp);
  111. j = j->next;
  112. }
  113. else
  114. {
  115. sum = i->coef + j->coef;
  116. if(sum != 0)
  117. k = appendTerm(k,sum,i->exp);
  118. i = i->next;
  119. j = j->next;
  120. }
  121. }
  122. while(i != NULL)
  123. {
  124. k = appendTerm(k,i->coef,i->exp);
  125. i = i->next;
  126. }
  127. while(j != NULL)
  128. {
  129. k = appendTerm(k,j->coef,j->exp);
  130. j = j->next;
  131. }
  132. return rs;
  133. }
  134.  
  135. Node* ProNode(Node *fst, Node* snd){
  136. Node *rs,*k,*i,*j;
  137. rs = getNode();
  138. rs->next = NULL;
  139. k = rs;
  140. i = fst;
  141. j = snd;
  142. while(i != NULL)
  143. {
  144. k = appendTerm(k,i->coef*snd->coef,i->exp+snd->exp);
  145. i = i->next;
  146. }
  147. return rs;
  148. }
  149.  
  150. Node* ProPoly(Node *fst, Node *snd){
  151. Node *rs,*i,*j;
  152. rs = getNode();
  153. rs->next = NULL;
  154. i = fst->next;
  155. j = snd->next;
  156. while(j != NULL)
  157. {
  158. rs = addPoly(rs,ProNode(i,j));
  159. j = j->next;
  160. }
  161. return rs;
  162. }
  163.  
Success #stdin #stdout 0s 5280KB
stdin
3
5 3 3 2 3 1
3
2 6 2 3 1 0
stdout
 10 9 6 8 6 7 10 6 6 5 6 4 5 3 3 2 3 1
42
24