题目描述
1009 Product of Polynomials (25分)
以指数 底数
的形式输入两行数据,输出相乘结果
每行的第一个数字表示指数 底数
有多少组
思路
跟1002 A+B for Polynomials (25分)很相似。
用两个结构体来存储输入数据
使用map<int, double>来存储答案,int存指数,double表示系数相乘的结果
注意判断系数等于0的情况,否则第一个测试点不通过
#include <bits/stdc++.h>
using namespace std;
struct node1
{
int exp;
double coe;
}a1[12];
struct node2
{
int exp;
double coe;
}a2[12];
map<int, double> ans;
typedef pair<int,double>PAIR;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
int n1,n2;
cin>>n1;
for(int i=1;i<=n1;i++)
cin>>a1[i].exp>>a1[i].coe;
cin>>n2;
for(int i=1;i<=n2;i++)
cin>>a2[i].exp>>a2[i].coe;
for(int i=1;i<=n1;i++)
{
for(int j=1;j<=n2;j++)
{
int index=0;
index=a1[i].exp+a2[j].exp;
ans[index]+=a1[i].coe*a2[j].coe;
}
}
int cnt=0;//统计系数等于0的个数
vector<PAIR>vec(ans.rbegin(),ans.rend());
for(auto it=0;it<vec.size();it++)
{
if(vec[it].second==0)cnt++;
}
printf("%d",(int)ans.size()-cnt);
for(auto it=0;it<vec.size();it++)
{
if(vec[it].second==0)continue;
printf(" %d %.1lf",vec[it].first,vec[it].second);
}
return 0;
}