1002 A+B for Polynomials (25分)

    科技2026-04-24  1

    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 N ​1 ​​ a ​N ​1 ​​ ​​ N ​2 ​​ a ​N ​2 ​​ ​​ … N ​K ​​ a ​N ​K ​​ ​​

    where K is the number of nonzero terms in the polynomial, N ​i ​​ and a ​N ​i ​​ ​​ (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤N ​K ​​ <⋯<N ​2 ​​ <N ​1 ​​ ≤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

    这道题一开始根本没看懂什么意思,现在其实都不是很懂,但知道怎么做,把指数相同的系数相加,然后按指数递减的顺序输出。 一开始用了map,后面不会反向遍历map,然后还是乖乖用了数组 因为是小数,所以用的是float数组,输出当然也要注意是.1f,判断也是用0.0来判断 https://zhidao.baidu.com/question/139040882608359725.html 顺便贴一个double和float的区别 https://zhidao.baidu.com/question/418125274.html

    #include<iostream> #include<cstdio> using namespace std; int main(){ float hash[1010] = {0}; int n, m, z, num = 0; float x; cin>>n; for(int i = 0; i < n; i++){ cin >> z >> x; hash[z] += x; } cin>>m; for(int i = 0; i < m; i++){ cin >> z >> x; hash[z] += x; } for(int i = 0; i < 1001; i++){ if(hash[i] != 0) num++; } cout << num; for(int i = 1001; i >= 0; i--){ if(hash[i] != 0.0){ printf(" %d %.1f", i, hash[i]); } } cout << endl; return 0; }
    Processed: 0.009, SQL: 10