zoukankan      html  css  js  c++  java
  • 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;
    }
    
     
  • 相关阅读:
    深度学习之TensorFlow(一)——基本使用
    64位win10+cuda8.0+vs2013+cuDNN V5下Caffe的编译安装教程并配置matlab2014a 接口
    Win10+vs2012+cuda8.0的安装与配置
    图像处理与matlab实例之图像平滑(一)
    Windows下pycharm使用theano的方法
    Python中的支持向量机SVM的使用(有实例)
    混淆矩阵在Matlab中PRtools模式识别工具箱的应用
    模式识别与机器学习—bagging与boosting
    微服务架构下分布式事务解决方案——阿里GTS
    谈谈分布式事务
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270943.html
Copyright © 2011-2022 走看看