1009 Product of Polynomials (25 分)
水题
- 处理有一点小小的麻烦
- 用vector很舒服哈哈哈。
代码
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
// #include
using namespace std;
typedef struct Node{
int exp;
double coe;
Node(){}
Node(int exp_,double coe_){
exp=exp_;
coe=coe_;
}
bool operator<(struct Node node){
return exp>node.exp;
}
} Node;
vector<vector<Node>>v;
vector<Node>sum_;
double my_abs(double a){
if(a<0){
a=-a;
}return a;
}
int main(){
int n,m;
cin>>n;
vector<Node>tmp;
int val;
double coe;
for(int i=0;i<n;i++){
scanf("%d%lf",&val,&coe);
tmp.push_back(Node(val,coe));
}
v.push_back(tmp);
tmp.clear();
cin>>m;
for(int i=0;i<m;i++){
scanf("%d%lf",&val,&coe);
tmp.push_back(Node(val,coe));
}
v.push_back(tmp);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
val=v[0][i].exp+v[1][j].exp;
coe=v[0][i].coe*v[1][j].coe;
// printf("begin: %.3f %.3f %d %.1f\n",v[0][i].coe,v[1][j].coe,val,coe);
sum_.push_back(Node(val,coe));
}
}
sort(sum_.begin(),sum_.end());
if(sum_.size()<=0){
return -1;
}
int i=0;
vector<Node>res;
int prev=sum_[0].exp;
double cum_sum=sum_[0].coe;
i=1;
while(i<sum_.size()){
if(sum_[i].exp!=prev){
if(my_abs(cum_sum)>0.00000000001){
res.push_back(Node(prev,cum_sum));
}
prev=sum_[i].exp;
cum_sum=sum_[i].coe;
i++;
continue;
}
cum_sum+=sum_[i].coe;
i++;
}
res.push_back(Node(prev,cum_sum));
cout<<res.size();
if(res.size()>0){
cout<<" ";
}
for(int i=0;i<res.size();i++){
printf("%d %.1f",res[i].exp,res[i].coe);
if(i<res.size()-1){
printf(" ");
}else{
printf("\n");
}
}
return 0;
}