[PAT] A1002 A+B for Polynomials (23分!)

A1002 A+B for Polynomials


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 N1aN1N2aN2NkaNk
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 1≤K≤10,0≤Nk< … <N2<N1≤1000.

Output Specification

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

Code

模拟多项式加法。测试点5一直格式错误,没找到错误点…
需要注意的是:1、输出末尾不能含空格;2、精确到小数点后1位;3、系数为0的项是不输出的。

关于精确到小数点后一位,用的是: cout.setf(ios::fixed);+ cout<<setprecision(1)<<sumc[i];。可以参考setprecision、fixed、showpoint的用法总结

代码一如既往地写的罗里吧嗦。

#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long int expa[1010]={0},expb[1010]={0},sume[1010]={0};
    double coea[1010]={0.0},coeb[1010]={0.0},sumc[1010]={0.0};
    long long int k1,k2,k3=0,k4=1000,expon,cnt=0;
    double coeff;
    cin>>k1;
    for(int i=0;i<k1;i++)
    {
        cin>>expon>>coeff;
        expa[expon]++;
        coea[expon]=coeff;
        if(expon>k3)
            k3=expon;
        if(expon<k4)
            k4=expon;
    }
    cin>>k2;
    for(int i=0;i<k2;i++)
    {
        cin>>expon>>coeff;
        if(expon<0)
        {
            expon = expon;
            coeff = coeff;
        }
        expb[expon]++;
        coeb[expon]=coeff;
        if(expon>k3)
            k3=expon;
        if(expon<k4)
            k4=expon;
    }
    for(int i=0;i<k3+1;i++)
    {
        if(expa[i])
            sume[i]++;
        if(expb[i])
            sume[i]++;
        if(sume[i])
            sumc[i]=coeb[i]+coea[i];
    }
    for(int i=k3;i>=0;i--)
        if(sume[i] && sumc[i])
            cnt++;
    if(cnt)
        cout<<cnt<<" ";
    else
        cout<<cnt;
    for(int i=k3;i>=0;i--)
    {
        cout.setf(ios::fixed);
        if(sume[i] && sumc[i])
        {
            cout<<i<<" "<<setprecision(1)<<sumc[i];
            if(i != k4)
                cout<<" ";
        }
    }
}
上一篇:【IOI2018】排座位


下一篇:glmnet包做线性回归