• PAT 甲级 1009 Product of Polynomials (25)(25 分)(坑比较多,a可能很大,a也有可能是负数,回头再看看)...


    1009 Product of Polynomials (25)(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 a~N1~ N2 a~N2~ ... NK a~NK~, where K is the number of nonzero terms in the polynomial, Ni and a~Ni~ (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
    
    算两个多项式polynomials的乘积,挺简单的一题,一开始就5分,原来c数组开太小,结果仍只有20分,原来a(未知数的次数)可能是负数,
    乘积的未知数次数算出来是0的不要算进去
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<vector>
    #include<stack>
    #include<map>
    #define inf 0x3f3f3f3f
    using namespace std;
    struct node
    {
        int k;
        double num;
    };
    node a[105];
    node b[105];
    double c[200010];
    int s=0;
    int main()
    {
        int n1;
        while(cin>>n1)
        {
            s=0;//记录最后有多少组
            for(int i=1;i<=n1;i++)
            {
                cin>>a[i].k>>a[i].num;
            }
            int n2;
            cin>>n2;
            for(int i=1;i<=n2;i++)
            {
                cin>>b[i].k>>b[i].num;
            }
            memset(c,0,sizeof(c));
            for(int i=1;i<=n1;i++)
            {
                for(int j=1;j<=n2;j++)
                {
                    int k=a[i].k+b[j].k;
                    if(k>0&&c[k]==0)
                    {
                        s++;
                    }
                    else if(k<0&&c[-1*k+100005]==0)//万一是负数,特殊处理
                    {
                        s++;
                        k=-1*k+100005;
                    }
                    c[k]+=a[i].num*b[j].num;
                }
            }
            cout<<s;//输出组数
            for(int i=200005;i>=0;i--)
            {
                if(c[i]!=0&&i>100005)
                    printf(" %d %.1f",-1*(i-100005),c[i]);
                else if(c[i]!=0&&i<=100005)
                    printf(" %d %.1f",i,c[i]);
            }
            cout<<endl;
        }
        return 0;
    }
    
     
  • 相关阅读:
    django2.2/mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
    orm练习题
    url的匹配问题
    集成抽象类后出现的问题
    迅为IMX6Q开发板上移植mplayer
    迅为i.MX6ULL开发板原理图分析介绍
    性价比高又能较好的学习嵌入式ARM+Linux的开发板
    适合初学者的linux开发板
    IMX6ULL开发板
    i.MX6ULL开发板终结者资料介绍
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270943.html
Copyright © 2020-2023  润新知