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;
}