#define debug(a,n) for(int i=0;i<n;++i)cout<<a[i]<<' ';cout<<endl;
#define FRER() freopen("i.txt","r",stdin)
//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
using namespace std;
typedef int Status;
typedef int ElemType; //假设线性表中的元素均为整型
typedef struct LNode
{
ElemType data;
ElemType n;
struct LNode *next;
} LNode,*LinkList;
Status ListCreat_L(LinkList &L)
{
LinkList q,Point_L;
L=(LinkList)malloc(sizeof(LNode));
if(L==NULL)
exit(ERROR);
Point_L=L;
ElemType p,e,num;
scanf("%d",&num);
for(int i=0; i<num; i++)
{
scanf("%d%d",&p,&e);
q=(LinkList)malloc(sizeof(LNode));
if(q==NULL)
exit(ERROR);
q->data=p;
q->n=e;
Point_L->next=q;
Point_L=q;
}
Point_L->next=NULL;
return OK;
}
void ListAddtion_L(LinkList &LA,LinkList &LB,LinkList &LC)
{
LinkList Point_LA=LA->next,Point_LB=LB->next,Point_LC,p;
LC=(LinkList)malloc(sizeof(LNode));
Point_LC=LC;
while(Point_LA&&Point_LB)
{
if(Point_LA->n==Point_LB->n)
{
if((Point_LA->data+Point_LB->data)==0)
{
Point_LA=Point_LA->next;
Point_LB=Point_LB->next;
continue;
}
p=(LinkList)malloc(sizeof(LNode));
p->data=Point_LA->data+Point_LB->data;
p->n=Point_LA->n;
Point_LC->next=p;
Point_LC=p;
Point_LA=Point_LA->next;
Point_LB=Point_LB->next;
}
else if(Point_LA->n>Point_LB->n)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=Point_LA->data;
p->n=Point_LA->n;
Point_LC->next=p;
Point_LC=p;
Point_LA=Point_LA->next;
}
else
{
p=(LinkList)malloc(sizeof(LNode));
p->data=Point_LB->data;
p->n=Point_LB->n;
Point_LC->next=p;
Point_LC=p;
Point_LB=Point_LB->next;
}
}
while(Point_LA)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=Point_LA->data;
p->n=Point_LA->n;
Point_LC->next=p;
Point_LC=p;
Point_LA=Point_LA->next;
}
while(Point_LB)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=Point_LB->data;
p->n=Point_LB->n;
Point_LC->next=p;
Point_LC=p;
Point_LB=Point_LB->next;
}
Point_LC->next=NULL;
}
void ListMultiply_L(ElemType a,ElemType b,LinkList &L,LinkList &LC)
{
LinkList Point_L=L->next,Point_LC,p;
LC=(LinkList)malloc(sizeof(LNode));
Point_LC=LC;
while(Point_L)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=a*(Point_L->data);
p->n=(Point_L->n)+b;
Point_LC->next=p;
Point_LC=p;
Point_L=Point_L->next;
}
Point_LC->next=NULL;
}
void ListPrint(LinkList &L)
{
LinkList p=L->next;
if(p==NULL)
{
printf("0 0\n");
return ;
}
while(p)
{
if(p->next==NULL)
printf("%d %d\n",p->data,p->n);
else
printf("%d %d ",p->data,p->n);
p=p->next;
}
}
int main()
{
LinkList LA,LB,LC,Point_LA,Point_L,Point_LC;
ListCreat_L(LA);
ListCreat_L(LB);
Point_LA=LA->next;
//Point_L=(LinkList)malloc(sizeof(LNode));
//while(Point_LA)
//{
ListMultiply_L(Point_LA->data,Point_LA->n,LB,LC);
// ListAddtion_L(LC,Point_L,Point_LC);
// Point_L=Point_LC;
//Point_LA=Point_LA->next;
// }
ListPrint(Point_LC);
//ListAddtion_L(LA,LB,LC);
//ListPrint(LC);
return 0;
}