1002. A+B for Polynomials (25)

来源:互联网 发布:知轻重明得失的意思 编辑:程序博客网 时间:2024/04/30 08:22

1002. A+B for Polynomials (25)

时间限制
400 ms
内存限制
32000 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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 aN1 N2 aN2 ... NK aNK, 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

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.22 2 1.5 1 0.5
Sample Output
3 2 1.5 1 2.9 0 3.2

这是一道中等题目,目的是求多项式A和B的和,因为Ni<=1000,所以其实可以用一个a[1001]数组保存多项式的系数,下标表示多项式的指数,这样表示算法加法会比较简单,但是只能满足Ni<=1000,虽然测试是可以通过,但是这样写感觉特别不爽,最后笔者还是vector<Term>保存一个多项式,Term表示多项式的一项,这样无论是N为任意值都是可以运行的,最后代码如下。代码中isend_a和isend_b分别表示多项式A和B的结束标签,当遍历到最后一位时,即i=a.size时,标签isend_a赋值为true,同理isend_b

#include<vector>#include<iostream>#include <iomanip>using namespace std;typedef struct term{int exponent;double coefficient;}Term;vector<Term> addTerm( vector<Term>& a , vector<Term>& b ){int i,j;//i为a下标,j为b下标vector<Term> sum;Term temp;bool isend_a = false ,isend_b = false ;for ( i = 0 , j = 0 ; !(isend_a && isend_b) ; ){if ( !isend_a && !isend_b && a[i].exponent == b[j].exponent ){temp.exponent = a[i].exponent;temp.coefficient = a[i].coefficient + b[j].coefficient;if ( temp.coefficient != 0 )sum.push_back(temp);i++;j++;}else if( !isend_a && !isend_b && a[i].exponent > b[j].exponent ){temp = a[i];sum.push_back(temp);i++;}else if( !isend_a && !isend_b && a[i].exponent < b[j].exponent ){temp = b[j];sum.push_back(temp);j++;}//--------------------------------if ( i == a.size() ){isend_a = true;i = -1;}if ( j == b.size() ){isend_b = true;j = -1;}//--------------------------------if ( isend_a && isend_b ){//a和b都遍历到了最后一个就结束循环}else if ( isend_a && !isend_b ){temp = b[j];sum.push_back(temp);j++;}else if ( !isend_a && isend_b ){temp = a[i];sum.push_back(temp);i++;}}return sum;}int main(){int num,i;vector<Term> a,b,c;Term temp;cin>>num;for ( i = 0 ; i < num ; i++ ){cin>>temp.exponent>>temp.coefficient;a.push_back(temp);}cin>>num;for ( i = 0 ; i < num ; i++ ){cin>>temp.exponent>>temp.coefficient;b.push_back(temp);}c = addTerm( a , b );//-----------------------显示结果-------------------------cout<<c.size();for ( i = 0 ; i < c.size() ; i++ ){cout<<fixed<<setprecision(1);cout<<" "<<c[i].exponent<<" "<<c[i].coefficient;}return 0;}



0 0
原创粉丝点击