设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
思路
这个题做过,但是我这回输出用cout,不用printf,提交了好几回也过不去,
老是格式错误,后来把加速器
ios_base::sync_with_stdio(0); cin.tie(0); //加速io
删了,就AC了
输入输出我都只用cin和cout,真的不太明白为啥出现这种格式错误问题,
就很。。。。。懵逼
哦哦,别人发现了,我的换行格式用printf改成cout就又好了
printf和cout混用加上加速器,即使用 << flush;清空,PTA依然检测格式错误。。。。。
代码
#include<iostream>
#include<map>
using namespace std;
map<int,int> xx,x1,x2;
void pr(){
int count=0;
for(int i=-2001;i<2001;i++){
if(xx[i]!=0) count++;
}
if(count==0) cout<<"0 "<<"0";
for(int i=2001;i>=-2001;i--){
if(xx[i]!=0){
cout<<xx[i]<<" "<<i;
count--;
if(count) cout<<" ";
}
}
}
int main(){
//加速io
int n,a,b;
cin>>n;
while(n--){
cin>>a>>b;
x1[b]=a;
}
cin>>n;
while(n--){
cin>>a>>b;
x2[b]=a;
}
//乘
for(int i=-1001;i<1001;i++){
if(x1[i]){
for(int j=-1001;j<1001;j++){
if(x2[j])
xx[i+j]+=x1[i]*x2[j];
}
}
}
pr();
cout<<endl;
//加
xx.erase(xx.begin(),xx.end());
for(int i=-1001;i<1001;i++)
xx[i]=x1[i]+x2[i];
pr();
return 0;
}