PAT 1009 Product of Polynomials(简单计数)

原题地址

https://www.patest.cn/contests/pat-a-practise/1009

遵循多项式相乘规则,求多项式a+b的乘积。

解题思路

PAT-1002中已经做过多项式相加的题目,思路大致相同。

模拟多项式相乘的过程,需要注意不能用判断是否poly[i]为0来判断i是否在A中出现过,因为poly[i]的值有可能是由之前的相乘产生的,所以标明哪些数在A中出现过,而且用第二个数组存放解。

AC代码

#include 
#include 
using namespace std;
const int maxn = 2005;

int main()
{
    bool inA[maxn] = {false};
    double poly[maxn], add[maxn], t; //必须用两个数组,否则会影响判断
    for (int i = 0; i < maxn; ++i)
        poly[i] = add[i] = 0.0;
    int Acnt, Bcnt, exp;
    cin >> Acnt;
    for (int i = 0; i < Acnt; ++i)
    {
        cin >> exp >> t;
        poly[exp] = t;
        inA[exp] = true; //标识出现过
    }
    cin >> Bcnt;
    while(Bcnt--)
    {
        cin >> exp >> t;
        for (int i = 0; i < maxn; ++i)
            if (inA[i]) //需要指数相加
                add[i+exp] += poly[i]*t;
    }
    int non_zero = 0;
    for (int i = maxn-1; i >= 0; --i)
    {
        if (add[i] != 0) non_zero++;
    }
    cout << non_zero;
    for (int i = maxn-1; i >= 0; --i)
    {
        if (add[i] != 0)
            printf(" %d %.1f", i, add[i]);
    }
    return 0;
}

你可能感兴趣的:(算法与数据结构,PAT甲级,基础练习)