5-2 一元多项式的乘法与加法运算 (20分)

5-2 一元多项式的乘法与加法运算 (20分)_第1张图片
#include "deque"
#include "vector"
#include "iostream"
#include "map"
using namespace std;

struct Node
{ 
	int xi,zhi;
}; 
vector <Node> Q1;
vector <Node> Q2;
vector <Node> Q3;
int main( )
{  
    //freopen("1.txt","r",stdin);
    int m,n,i,j;
	cin>>m;
    while(m--)
	{
		Node item;
		cin>>item.xi>>item.zhi;
		Q1.push_back(item);
	}
	cin>>n;
	while(n--)
	{
		Node item;
		cin>>item.xi>>item.zhi;
		Q2.push_back(item);
	}
	i=0;j=0;  
	while(i<Q1.size() && j<Q2.size())
	{
         Node x,y;
		 x=Q1[i];
		 y=Q2[j];
         if(x.zhi>y.zhi)
		 {
			  Q3.push_back(x);
			  i++;
		 }
		 else if(x.zhi<y.zhi)
		 {
			  Q3.push_back(y);
			  j++;
		 }
		 else
		 {     
			  i++;j++;
			  int dx,dy;
			  dx=x.xi+y.xi;
			  dy=x.zhi;
			  if(dx!=0)
			  {
                Node T;
				T.xi=dx;
				T.zhi=dy;
				Q3.push_back(T);
			  }
		 }

	}
    while(i<Q1.size())
	{
		Q3.push_back(Q1[i]);
		i++;
	}
    while(j<Q2.size())
	{
		Q3.push_back (Q2[j]);
		j++;
	} 
	 
    map<int ,int >Q4;
    deque<Node>Q5;
    for(i=0;i<Q1.size();i++)
	{
	  Node x=Q1[i];
    for(j=0;j<Q2.size();j++)
	{  
      Node y=Q2[j];
	  int dx,dy;
	  dy=x.zhi+y.zhi;
      dx=x.xi*y.xi;
	  Q4[dy]+=dx;
	}
	}
    map<int,int>::iterator q;
	q=Q4.begin();
	for(q;q!=Q4.end();q++)
	{
       int x,y;
	   x=q->first;
	   y=q->second;
	   if(y!=0)
	   {
        Node T;
		T.xi=y;
		T.zhi=x;
		Q5.push_front(T);
	   }
	}

   if(  Q5.size()==0) cout<<"0 0";
   for(j=0;j<Q5.size();j++)
   {
       Node T;
	   T=Q5[j];
	   if(j==0)
	   cout<<T.xi<<" "<<T.zhi;
	   else
	   cout<<" "<<T.xi<<" "<<T.zhi;
   }
   cout<<endl;



	if( Q3.size()==0) cout<<"0 0";
	for(i=0;i<Q3.size();i++)
    {    
		Node x=Q3[i];
		if(i==0)
		{
			cout<<x.xi<<" "<<x.zhi;
		}
		else
		{
			cout<<" "<<x.xi<<" "<<x.zhi;
		}
	}
    
	return 0;
}

5-2 一元多项式的乘法与加法运算 (20分)_第2张图片

你可能感兴趣的:(5-2 一元多项式的乘法与加法运算 (20分))