【1009 25 多项式乘法】 Product of Polynomials

传送门

题意

计算多项式的乘积,给定两行数据,每行都是 \(k\) 组数据,其中 \(n\) 表示指数,\(a\) 表示系数,最后输出乘积的项数和按照指数从大到小的系数和指数

数据范围

\(1\leq k\leq 10\)
\(1\leq n\leq 1000\)

题解

  • cout << fixed << setprecision(1),设置输出的浮点数位数
  • map<int, int, greater<int>>,设置顺序是按照 key 从大到小排序
  • 每一项对应相乘,按照指数相加,系数相乘的规则运算即可

Code

#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second

map<int, double, greater<int>> x, res, ans;

int main() {
	int k, p; double a;
	cin >> k;
	for (int i = 0; i < k; i++) {
		cin >> p >> a;
		x[p] = a;
	}
	cin >> k;
	for (int i = 0; i < k; i++) {
		cin >> p >> a;
		for (auto it : x) {
			res[p + it.fi] += a * it.se;
		}		
	}

	for (auto it : res) {
		if (it.se != 0) {
			ans[it.fi] = it.se;
		}
	}
	cout << fixed << setprecision(1);
	cout << ans.size();
	for (auto& it : ans) {
		cout << " " << it.fi << " " << it.se;
	}
} 
posted @ 2021-01-26 03:11  Hyx'  阅读(23)  评论(0)    收藏  举报