• PAT甲级 1002 A+B for Polynomials (25)(25 分)


    1002 A+B for Polynomials (25)(25 分)

    This time, you are supposed to find A+B where A and B are two polynomials.

    Input

    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

    For each test case you should output the sum 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 to 1 decimal place.

    Sample Input

    2 1 2.4 0 3.2
    2 2 1.5 1 0.5
    

    Sample Output

    3 2 1.5 1 2.9 0 3.2
    
    

    1002.多项式A与B的和

    这次,假设A和B是两个多项式,求A与B的和多项式。

    输入

    每个输入文件包含一个测试实例。每个实例有两行,每行包含一个多项式的信息: K N1 aN1 N2 aN2 ... NK aNK,其中K为多项式中非0项的个数,Ni 和 aNi (i=1, 2, ..., K) 分别为指数和系数。数的范围是1 <= K <= 10,0<= NK < ... < N2 < N1 <=1000。

    输出

    对于每个测试实例,你需要在一行内输出A与B的和,格式与输入时相同。注意每行的结尾不能有多余的空格。小数精确到一位。

    多项式求和
    可能会有负数
    
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    using namespace std;
    double a[1005];
    bool b[1005];
    struct node
    {
        int x;
        double y;
    };
    int main()
    {
        int n,m;
        int max=0;
        while(cin>>n)
        {
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            int s=0;
            max=0;
            for(int i=1;i<=n;i++)
            {
                int x;
                double y;
                cin>>x>>y;
                a[x]+=y;
                if(x>max) max=x;
                if(!b[x])
                {
                    b[x]=1;
                }
            }
            cin>>m;
            for(int i=1;i<=m;i++)
            {
                int x;
                double y;
                cin>>x>>y;
                a[x]+=y;
                if(x>max) max=x;
                if(!b[x])
                {
                    b[x]=1;
                }
            }
            queue<node>q;
            while(!q.empty ()) q.pop();
            for(int i=max;i>=0;i--)
            {
                if(a[i]!=0)
                {
                    node p;
                    p.x=i;
                    p.y=a[i];
                    q.push (p);
                    s++;
                }
            }
            cout<<s;
            while(!q.empty ())
            {
                node p=q.front();
                q.pop();
                printf(" %d %.1lf",p.x,p.y);
            }
            cout<<endl;
            
        }
        return 0;
    
    }
    
     
     
  • 相关阅读:
    [杂题]CSUOJ1274Balls and Boxes
    [Gauss]POJ1222 EXTENDED LIGHTS OUT
    [杂题]CSUOJ1413 Area of a Fractal
    [AC自动机]HDOJ3695 Computer Virus on Planet Pandora
    [dp]POJ2559 && HDOJ1506 Largest Rectangle in a Histogram
    [TSP+floyd]POJ3311 Hie with the Pie
    [状压dp]HDOJ3182 Hamburger Magi
    [状压dp]HDOJ1565 方格取数(1)
    [dp]Codeforces30C Shooting Gallery
    树套树模版
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270976.html
Copyright © 2020-2023  润新知