码迷,mamicode.com
首页 > 其他好文 > 详细

1009 Product of Polynomials

时间:2018-12-31 19:12:54      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:stream   UNC   sample   ...   notice   lines   lis   相加   exponents   

1009 Product of Polynomials (25 分)

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 N?1?? a?N?1???? N?2?? a?N?2???? ... N?K?? a?N?K????

where K is the number of nonzero terms in the polynomial, N?i?? and a?N?i???? (i=1,2,?,K) are the exponents and coefficients, respectively. It is given that 1K10, 0N?K??<?<N?2??<N?1??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

坑点:
  多个项的系数相加可能为0,如果系数为0则不应该进行输出。
代码如下:
#include<iostream>
#include<sstream>
#include<algorithm>
#include<map>
#include<cstdio>
using namespace std;

struct Cmpoperator
{
    bool operator()(int key1,int key2)
    {
        return key1>key2;
    }
};

int main()
{
    map<int,double,Cmpoperator> A;
    map<int,double,Cmpoperator> B;
    int k=0;
    cin>>k;
    int exponents;
    double coefficients;
    for(int i=0; i<k; i++)
    {
        cin>>exponents>>coefficients;
        if(A.find(exponents)!=A.end())
        {
            A[exponents]+=coefficients;
        }
        else
        {
            A[exponents]=coefficients;
        }
    }
    int k2;
    cin>>k2;
    for(int i=0; i<k2; i++)
    {
        cin>>exponents>>coefficients;
        map<int,double>::iterator iter=A.begin();
        while(iter!=A.end())
        {
            int first=iter->first+exponents;
            double second=iter->second*coefficients;
            if(B.find(first)!=B.end())
            {
                B[first]+=second;
            }
            else
            {
                B[first]=second;
            }
            if(B[first]==0)
                B.erase(first);
            iter++;
        }
    }
    cout<<B.size();
    map<int,double>::iterator iter = B.begin();
    while(iter!=B.end())
    {
        cout<<" "<<iter->first<<" ";
        printf("%.1f",iter->second);
        iter++;
    }
    return 0;
}

 


1009 Product of Polynomials

标签:stream   UNC   sample   ...   notice   lines   lis   相加   exponents   

原文地址:https://www.cnblogs.com/zhanghaijie/p/10202496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!