题目描述
对于此题,题意很简单,就是两个多项式相加进行,完后输出系数和值
我采用map进行多项式相加,但是不知道问题出在哪,思路和大佬完全一样,但是得分只能得到一部分分数(菜菜菜 )最后发现原来是没有考虑系数可能为0的情况。
其中用到反向遍历map
#include<iostream>
#include<map>
#include<cstdio>
using namespace std;
map<int,double>a;
int main(){
int num;
int x;
double y;
cin>>num;
for(int i=0;i<num;i++){
cin>>x>>y;
a[x]+=y;
}
cin>>num;
for(int i=0;i<num;i++){
cin>>x>>y;
a[x]+=y;
if(a[x]==0)
a.erase(x);
}
cout<<a.size();
map<int, double>::reverse_iterator iter;
for(iter = a.rbegin(); iter != a.rend(); iter++){
//if(iter->second!=0)
printf(" %d %.1f",iter->first, iter->second );
}
}
大佬采用数组解(思路一毛一样,我的咋就不对呢)
#include<bits/stdc++.h>
using namespace std;
double coefficient[1005]={
0};
int main(){
int K;
scanf("%d",&K);
while(K--){
int a;
double b;
scanf("%d%lf",&a,&b);
coefficient[a]+=b;
}
scanf("%d",&K);
while(K--){
int a;
double b;
scanf("%d%lf",&a,&b);
coefficient[a]+=b;
}
int size=0;
for(int i=0;i<1005;++i)
if(coefficient[i]!=0)
++size;
printf("%d",size);
for(int i=1005;i>=0;--i)
if(coefficient[i]!=0)
printf(" %d %.1f",i,coefficient[i]);
return 0;
}