模拟多项式除法
round()是c99以上版本自带,c89没有
#include <bits/stdc++.h>

using namespace std;

unordered_map<int,double> a,b,c;
int e; double ci;
int n,amaxe,bmaxe,bmine,sub,cnt,cmaxe;
double tim;

int main(int argc, char** argv) {
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>e>>ci;
		amaxe=max(amaxe,e);
		a[e]+=ci;//a记录被除数
	}
	cin>>n;
	bmine=0x3f3f3f3f;
	for(int i=0;i<n;i++){
		cin>>e>>ci;
		bmaxe=max(bmaxe,e);
		bmine=min(bmine,e);
		b[e]+=ci;
	}
    //求商,a表余数
	for(int i=amaxe;i>=bmaxe;i--){
		tim=1.0*a[i]/b[bmaxe];//商的系数
		sub=i-bmaxe;//商的指数
		c[sub]=tim;
		for(int j=i;j>=bmine;j--){
			a[j]-=b[j-sub]*tim;//余数
		}
	}
    
	cnt=0;
	cmaxe=amaxe-bmaxe;
	for(int i=cmaxe;i>=0;i--){
		c[i]=1.0*round(c[i]*10)/10.0;
		if(c[i]) cnt++;
	}
	if(cnt){
		cout<<cnt;
		for(int i=cmaxe;i>=0;i--){
			if(c[i]) printf(" %d %.1lf",i,c[i]);
		}
		puts("");
	}else puts("0 0 0.0");//如果是零多项式,cnt是0要特殊处理
	
	cnt=0;
	for(int i=amaxe;i>=0;i--){
		a[i]=1.0*round(a[i]*10)/10.0;
		if(a[i]) cnt++;
	}
	if(cnt){
		cout<<cnt;
		for(int i=amaxe;i>=0;i--){
			if(a[i]) printf(" %d %.1lf",i,a[i]);
		}
		puts("");
	}else puts("0 0 0.0");
	
	return 0;
}