题目大意:分别给出两个多项式非零项的项数,对应每个非零项的指数和系数。求这两个多项式的乘积。
思路:PAT日常坑点多。
- 结果要按照指数递减的顺序进行输出,因此对map中根据key值排序的规则进行重定义。
- 对于结果只关注非零项的情况。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
map<int,double,greater<int> > mp1,mp2,mp3;
int main(){
int k,n;
double a;
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d%lf",&n,&a);
mp1[n]=a;
}
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d%lf",&n,&a);
mp2[n]=a;
}
for(map<int,double>::iterator it1=mp1.begin();it1!=mp1.end();it1++)
for(map<int,double>::iterator it2=mp2.begin();it2!=mp2.end();it2++){
mp3[it1->first+it2->first]+=it1->second*it2->second;
if(mp3[it1->first+it2->first]==0)
mp3.erase(it1->first+it2->first);
}
printf("%d",(int)mp3.size());
for(map<int,double>::iterator it=mp3.begin();it!=mp3.end();it++)
printf(" %d %.1lf",it->first,it->second);
printf("\n");
return 0;
}