• 1009 Product of Polynomials


    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 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 1K10, 0NK​​<<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

    坑点:
      多个项的系数相加可能为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;
    }

  • 相关阅读:
    在ASP.NET 2.0中使用WebParts
    Asp.net生成静态页面原理
    提高ASP.Net应用程序性能的十大方法
    Web2.0之Tag标签原理实现浅析
    ASP.NET 2.0中的URL映射
    动态加载控件UserControl到页面上:视图状态问题
    C#自动登录网页浏览页面 抓取数据
    .NET Framework 类库提供的命名空间
    一个用于热部署的框架设想
    重构如何进行?
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/10202496.html
Copyright © 2020-2023  润新知