【PAT甲级题解记录】1009 Product of Polynomials (25 分)
前言
Problem:1009 Product of Polynomials (25 分)
Tags:模拟
Difficulty:剧情模式
想流点汗想流点血死而无憾
问题描述
求两个多项式的乘积。
解题思路
数据范围很小,直接开俩个数组表示输入多项式,再开一个数组表示结果多项式,用普通的乘法思想去模拟即可(系数相乘,指数相加)。
注意点在于结果数组大小不要开错了,不是和输入数组一样大的。
参考代码
/*
* @Author: Retr0.Wu
* @Date: 2022-02-14 23:26:25
* @Last Modified by: Retr0.Wu
* @Last Modified time: 2022-02-15 02:07:19
*/
#include <bits/stdc++.h>
using namespace std;
vector<double> p1(1001,0);
vector<double> p2(1001,0);
vector<double> ans(2001,0);
int main()
{
int N;
// input
cin>>N;
for(int i=0;i<N;i++){
int e; // 指数
double c; // 系数
cin>>e>>c;
p1[e]+=c;
}
cin>>N;
for(int i=0;i<N;i++){
int e; // 指数
double c; // 系数
cin>>e>>c;
p2[e]+=c;
}
// simulation
for(int i=0;i<=1000;i++){
if(p1[i]==0) continue;
for(int j=0;j<=1000;j++){
ans[i+j]+=p1[i]*p2[j];
}
}
// output
int cnt = 0;
for(int i=0;i<=2000;i++){
if(ans[i]) cnt++;
}
cout<<cnt;
for(int i=2000;i>=0;i--){
if(ans[i]){
//printf(" %d %.1f\n",i,ans[i]);
cout<< fixed << " " << setprecision(0) <<i<<" "<< setprecision(1) <<ans[i];
}
}cout<<endl;
return 0;
}
总结
警惕下标越界,使用数组时想清楚下标范围,更不要定义的时候记得调用的时候忘记。