#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <queue>
using namespace std;
#define MAXN 1005
struct node
{
int a;
int x;
}date1[MAXN],date2[MAXN],datet[MAXN*2],date;
priority_queue<node>q;
bool operator < (node a,node b)
{
return a.x < b.x;
}
bool cmp(node a,node b)
{
return a.x > b.x;
}
int main()
{
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
int N1,N2,N;
int i,j,t = 1;
int aa,ax;
int ba,bx;
int ta;
bool flag = false;
scanf("%d",&N1);
for(i = 1;i<=N1;i++)
{
scanf("%d%d",&date1[i].a,&date1[i].x);
datet[t].a = date1[i].a;
datet[t].x = date1[i].x;
t++;
}
scanf("%d",&N2);
for(i = 1;i<=N2;i++)
{
scanf("%d%d",&date2[i].a,&date2[i].x);
datet[t].a = date2[i].a;
datet[t].x = date2[i].x;
t++;
}
for(i = 1;i<=N1;i++)
{
for(j = 1;j<=N2;j++)
{
date.x = date1[i].x+date2[j].x;
date.a = date1[i].a*date2[j].a;
q.push(date);
}
}
//注意:输出空格时,要注意检查是否存在下一项
while(!q.empty())
{
aa = q.top().a;
ax = q.top().x;
q.pop();
if(q.empty())
{
if(aa)
{
printf("%d %d",aa,ax);
flag = true;
}
continue;
}
ba = q.top().a;
bx = q.top().x;
q.pop();
if(ax==bx)
{
date.x = ax;
date.a = aa + ba;
if(date.a)
q.push(date);
continue;
}
else
{
printf("%d %d",aa,ax);
date.x = bx;
date.a = ba;
q.push(date);
flag = true;
}
if(!q.empty())
printf(" ");
}
if(flag==false)
printf("0 0");
printf("\n");
flag = false;
N = N1 + N2;
sort(datet + 1,datet + 1 + N,cmp);
for(i = 1;i<=N;i++)
{
if(i<N)
{
if(datet[i].x==datet[i+1].x)
{
ta = datet[i].a + datet[i+1].a;
if(ta)
{
printf("%d %d",ta,datet[i].x);
flag = true;
}
i ++;
}
else
{
printf("%d %d",datet[i].a,datet[i].x);
flag = true;
}
}
else if(datet[i].a)
{
printf("%d %d",datet[i].a,datet[i].x);
flag = true;
}
if(i<N&&flag==true)
{
if(datet[i+1].x==datet[i+2].x)
{
ta = datet[i+1].a + datet[i+2].a;
if(ta)
{
printf(" ");
}
}
else if(datet[i+1].a)
{
printf(" ");
}
}
}
if(flag == false)
printf("0 0");
return 0;
}
一元多项式的乘法与加法运算(数组+排序)
猜你喜欢
转载自blog.csdn.net/qq_39592312/article/details/104566450
今日推荐
周排行