设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
代码:
#include<bits/stdc++.h>
using namespace std;
class cmp{
public:
bool operator()(const int &a,const int &b)const{
return a>b;
}
};
int main() {
int n, m; cin >> n;
map<int,int>a,b;
for(int x,y;n--&&cin>>x>>y;){
a[y]+=x;
}
cin>>m;
for(int x,y;m--&&cin>>x>>y;){
b[y]+=x;
}
map<int,int,cmp>mul,add;
for(auto[y,x]:a){
for(auto[ty,tx]:b){
mul[y+ty]+=x*tx;
}
auto iter=b.find(y);
if(iter!=b.end()){//找到相同系数,a+b
add[y]+=x+(*iter).second;
}else{//a
add[y]=x;
}
}
for(auto[y,x]:b){//b
if(a.find(y)==a.end()){//不是和a相同的系数
add[y]=x;
}
}
int flag=0;
for(auto it=mul.begin();it!=mul.end();it++){
auto [y,x]=*it;
if(!x){
continue;
}
if(!flag){
cout<<x<<" "<<y;
}else{
cout<<" "<<x<<" "<<y;
}
flag++;
}
if(!flag){//只有00
cout<<"0 0";
}
cout<<endl;
flag=0;
for(auto it=add.begin();it!=add.end();it++){
auto [y,x]=*it;
if(!x){
continue;
}
if(!flag){
cout<<x<<" "<<y;
}else{
cout<<" "<<x<<" "<<y;
}
flag++;
}
if(!flag){//只有00
cout<<"0 0";
}
return 0;
}
是学长教的,感觉很受益遂记录。