题目
L2-018 多项式A除以B (25 分)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/899a47712452fa5951c61b7386266981.png)
分析
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1221e2018a915e26d71ed090c36b54e6.png)
代码
#include<bits/stdc++.h>
using namespace std;
double e1[100100],e2[100100],e3[100100];
int main()
{
int n,m,i,x,j;
double y;
int ep1=0,ep2=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%lf",&x,&y);
e1[x]+=y;
if(ep1<x)
ep1=x;
}
scanf("%d",&m);
for(i=0;i<m;i++){
scanf("%d%lf",&x,&y);
e2[x]+=y;
if(ep2<x) ep2=x;
}
if(ep1<ep2)
{
printf("0 0 0.0\n");
printf("%d",n);
for(i=ep1;i>=0;i--)
if(fabs(e1[i])>=0.05)
printf(" %d %.1lf",i,e1[i]);
printf("\n");
}
else
{
int tp=ep1;
while(ep1>=ep2)
{
y=e1[ep1]/e2[ep2];
e3[ep1-ep2]+=y;
for(i=ep2;i>=0;i--)
if(fabs(e2[i])>=0.05)
e1[i+ep1-ep2]-=y*e2[i];
int ep=0;
for(i=tp;i>=0;i--)
if(fabs(e1[i])>=0.05)
{
if(i>ep)
ep=i;
break;
}
if(i<0)
break;
ep1=ep;
}
int f1=0,f2=0;
for(i=tp;i>=0;i--)
{
if(fabs(e3[i])>=0.05)
f1++;
if(fabs(e1[i])>=0.05)
f2++;
}
if(f1==0)
printf("0 0 0.0\n");
else
{
printf("%d ",f1);
for(f1=0,i=tp;i>=0;i--)
if(fabs(e3[i])>=0.05)
{
if(f1)
printf(" ");
f1++;
printf("%d %.1lf",i,e3[i]);
}
printf("\n");
}
if(f2==0)
printf("0 0 0.0\n");
else
{
printf("%d ",f2);
for(f2=0,i=tp;i>=0;i--)
if(fabs(e1[i])>=0.05)
{
if(f2)
printf(" ");
f2++;
printf("%d %.1lf",i,e1[i]);
}
printf("\n");
}
}
return 0;
}