PAT甲級_1009(Product of Polynomials)

1009 多項式乘積

這次,你應該求出多項式A和B的乘積(A*B)

輸入規範

每個輸入文件包含一個測試用例。每個測試用例佔行,每行包含一個多項式的信息:
K N1 aN1 N2 aN2 … NK aNK
其中K表示多項式中非零項的個數,Ni和aNi(i = 1, 2, 3, …, K)分別表示指數和係數。它們的範圍位1 <= K <= 10, 0 <= NK < … < N2 < N1 <= 1000。

輸出規範

對於每個測試用例,你應該按照輸入的格式在一行中輸出A和B的乘積。注意一行的末尾沒有多餘的空格。請保留小數點後一位。

輸入樣例
2 1 2.4 0 3.2
2 2 1.5 1 0.5
輸出樣例
3 3 3.6 2 6.0 1 1.6
解題思路

模擬多項式計算過程。需要注意的是給定的多項式指數不超過1000,但是求解A*B時指數相加,答案應該時不超過2000。所以開答案數組應該開到2000大小。

AC代碼
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1005;
pair<int, double> p[MAXN];  //保存第一個多項式
double res[MAXN];       //保存答案,res[i]表示係數爲i的指數
int main() {
    //輸入第一個多項式
    int k1;
    cin >> k1;
    for(int i = 0; i < k1; i++) {
        cin >> p[i].first >> p[i].second;
    }
    
    //輸入第二個多項式
    int k2;
    cin >> k2;
    for(int i = 0; i < k2; i++) {
        int n;
        double a;
        cin >> n >> a;
        //求解
        for(int j = 0; j < k1; j++) {
            res[p[j].first+n] += a * p[j].second;
        }
    }
    
    int cnt = 0;
    for(int i = 0; i < MAXN; i++) {
        if(res[i] != 0) {
            cnt++;
        }
    }
    if(!cnt) {
        cout << cnt << endl;
    }else {
        cout << cnt;
        for(int i = MAXN - 1; i >= 0; i--) {
            if(res[i] != 0) {
                printf(" %d %.1lf", i, res[i]);
            }
        }
        cout << endl;   
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章