!!!重点:这题有一个比较坑的地方是测试点0。
原因:对于测试点0,要考虑系数为0时不打印。因此在打印前要先删去系数为0的条目。
由于我是用map写的,写的时候又忘记结果中系数为0,要删去,导致我测试点0一直过不去!!!
删去系数为0的条目:
#include <iostream>
#include <map>
#include <iterator>
#include <iomanip>//c++中浮点数保留尾数头文件
using namespace std;
int main()
{
int k,n,i;
double an;
map<int,double> sum;
cin >> k;
map<int,double> a;
for(i=0;i<k;i++){
cin >> n >> an;
a[n] = an;
}
cin >> k;
map<int,double> b;
for(i=0;i<k;i++){
cin >> n >> an;
b[n] = an;
}
for(auto const &ita:a){
for(auto const &itb:b){
if(sum.find(ita.first+itb.first) == sum.end()){
sum[ita.first+itb.first] = ita.second * itb.second;
}else{
sum[ita.first+itb.first] += ita.second * itb.second;
}
}
}
//重点:注意 要删去系数为0的条目
for(auto const &itsum:sum){
if(itsum.second == 0){
sum.erase(itsum.first);
}
}
cout << sum.size();
//cout<<setiosflags(ios::fixed)<<setprecision(1); //C++中尾数保留1位
map<int,double>::reverse_iterator rit;
for(rit = sum.rbegin();rit != sum.rend();rit++){
printf(" %d %.1lf",rit->first,rit->second);
//cout << " " << rit->first << " " << rit->second;
}
return 0;
}