1002. A+B for Polynomials (25)—PAT Class A

This time,you are supposed to find A+B where A+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 aN1 N2 aN2 ... Nk aNK, Where k is the number of nonezero 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

For each test case you should output the sum of A and B in one line, with the same format asthe 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

The main idea of ​​the title: Polynomials combine similar terms, and output the number of terms, exponents and coefficients of the final polynomial according to the input format.
Analysis: Construct an integer array to store the coefficients of the polynomial, and accumulate the coefficients of the same index when inputting. If the value stored in the array before the accumulation is 0, then the number of terms of the polynomial is increased by 1; if it is equal to 0 after the accumulation, then the number of terms of the polynomial minus one. Note: The exponents of polynomials are all integers, don't think about it~

#include <iostream>
using namespace std;

double s[1005]={0};
int main() {
    int k,n,time=2,count=0; 
    double ak;
    while(time--){
        scanf("%d",&k);
        while(k--){
            scanf(" %d %lf",&n,&ak);
            if(s[n]==0)count++;
            s[n]+=ak;
            if(s[n]==0)count--;
        }
    }
    printf("%d",count);
    for(int i=1005;i>=0;i--){
        if(s[i]!=0){
            printf(" %d %.1lf",i,s[i]);
        }
    }
    printf("\n");
    return 0;
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325047630&siteId=291194637