不说废话先上代码原题链接
#include<bits/stdc++.h>
using namespace std;
map<int,double>p1,p2,ans;
int main(){
int n1,n2;
cin>>n1;
for(int i=0;i<n1;i++){
int expo;
cin>>expo;
cin>>p1[expo];
}
cin>>n2;
for(int i=0;i<n2;i++){
int expo;
cin>>expo;
cin>>p2[expo];
}
auto it1=p1.begin();
while(it1!=p1.end()){
auto it2=p2.begin();
while(it2!=p2.end()){
ans[(-1)*(it1->first+it2->first)]+=it1->second*it2->second;
it2++;
}
it1++;
}
int cou=0;
auto it=ans.begin();
while(it!=ans.end()){
if(it->second!=0)cou++;
it++;
}
cout<<cou;
it=ans.begin();
while(it!=ans.end()){
if(it->second!=0)printf(" %d %.1f",it->first*(-1),it->second);
it++;
}
}
解题思路
整体采用两重循环做多项式乘法,具体细节可以参考不懂看这
题目描述
This time, you are supposed to find A×B where A and B are two polynomials.
Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
K N1 aN1 N2 aN2 ... NK aNK
where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10, 0≤NK<⋯<N2<N1≤1000.
Output Specification:
For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 3 3.6 2 6.0 1 1.6
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
大致题意
多项式乘法