首页 > 其他 > 详细

PAT 1002

时间:2015-12-06 15:58:35      阅读:200      评论:0      收藏:0      [点我收藏+]

1002. A+B for Polynomials (25)

时间限制
400 ms
内存限制
65536 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.2
2 2 1.5 1 0.5
Sample Output
3 2 1.5 1 2.9 0 3.2

解析:其实就是简单的多项式相加,将相同指数项的coefficient相加即可,注意零项需要去除。也可以使用key-value,这样可以节省内存。

Code:
#include <iostream>
#include <iomanip>
#include <string.h>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;

int main(){
    //use array to store
    double A[1100];
    memset(A,0,sizeof(A));
    
    int k1;
    cin>>k1;
    
    int ex;
    double co;
    while(k1--){
        cin>>ex>>co;
        A[ex] = co;
    }
    
    
    int k2;
    cin>>k2;
    
    int ex2;
    double co2;
    while(k2--){
        cin>>ex2>>co2;
        A[ex2] += co2;
    }
    
    //serach for non-zero
    vector<int> exs;
    vector<double> cos;
    int count = 0;
    for(int i=1000; i>=0; i--){
        if(A[i] != 0){
            exs.push_back(i);
            cos.push_back(A[i]);
            count++;
        }
    }
    
    cout<<count;
    for(int i=0; i<exs.size(); i++){
        printf(" %d %.1lf",exs[i],cos[i]);
    }
    
    return 0;
}

 

PAT 1002

原文:http://www.cnblogs.com/RookieCoder/p/5023680.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!