PAT甲级练习1002

1002. A+B for Polynomials (25)

输入:两个多项式,第1个多项式在第1行,第2个在第2行,格式形如

多项式项数 指数N1 系数an1 指数N2 系数an2 ... (K取值范围[1,10],指数Ni取值范围[0, 1000],题目保证指数的输入是递减的,即N(i-1)<N(i))

输出:两个多项式的和,格式和输入时候一样。

# define _CRT_SECURE_NO_WARNINGS

# include <iostream>
# include <string>
# include <sstream>
# include <vector>
# include <algorithm>
# include <functional>
# include <iomanip>
# include <ctime>
# include <map>
# include <math.h>
# include <string.h>

using namespace std;

bool com1(int a, int b)
{
    return a >= b;
}

int main(void)
{
    int K1, K2;
    int numOfX;
    double num;

    int i = 0;
    int cnt;                    //出现过的指数个数
    int aCnt;                    //实际输出个数

    double numX[1001];            //指数范围[0,1000],所以用该数组记录
    int headX[20];                //记录出现过的指数
    

    memset(numX, 0, 1001*sizeof(double));

    cin >> K1;
    for (i = 0; i < K1; i++)
    {
        cin >> numOfX >> num;
        headX[i] = numOfX;
        numX[numOfX] += num;
    }

    cnt = i;
    aCnt = i;
    cin >> K2;
    for (i = 0; i < K2; i++)
    {
        cin >> numOfX >> num;
        if (numX[numOfX] == 0)            //若该数为0,说明该指数没有出现过
        {
            headX[cnt++] = numOfX;
            aCnt++;
        }
        numX[numOfX] += num;            //计算过后,若该数为0,则该指数不会被输出
        if (numX[numOfX] == 0)
            aCnt--;
    }

    sort(headX, headX+cnt, com1);        //对出现过的指数排列
//    qSort(headX, 0, cnt - 1, com1);

    /*                                    //原本认为当两式子抵消之后,输出会是
    if (aCnt == 0)                        //这个样子的,但实际上,只需要输出aCnt就可以了。
        cout << "0 0 0.0" << endl;        //这样输出最后1个测试点不能通过。
    else
    */
    {
        cout << aCnt;
        for (i = 0; i < cnt; i++)
        {
            if (numX[headX[i]] != 0)
                printf(" %d %.1lf", headX[i], numX[headX[i]]);
        }
        cout << endl;
    }

    return 0;
}

 

posted on 2016-04-30 09:57  Ncoin  阅读(1609)  评论(0编辑  收藏  举报

导航