原文的意思大概是:给出两行数据,每一行都代表一个多项式,然后求两多项式想乘得到的新多项式。
这次写发现数据更新了,按以前的写法第一个case过不掉了,所以做了一个测试,可能是出现了下面数据的情况
测试样例
2 1 0.0 0 2.3
3 2 0.5 1 1.2 0 0.9
答案
3 2 1.1 1 2.8 0 2.1
而并非为
4 3 0.0 2 1.1 1 2.8 0 2.1
下面是代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define x first
#define y second
typedef pair<int, double> PID;
const int maxn = 2010;
int n1, n2, cnt;
double mul[maxn];
vector<PID> v1, v2;
void scan(int n, vector<PID> &v) {
int mi;
double num;
for (int i = 0; i < n; i++) {
cin >> mi >> num;
PID a;
a.x = mi, a.y = num;
v.push_back(a);
}
}
int main() {
cin >> n1;
scan(n1, v1);
cin >> n2;
scan(n2, v2);
for (int i = 0; i < v1.size(); i++) {
for (int j = 0; j < v2.size(); j++) {
int num = v1[i].x+v2[j].x;
mul[num] += v1[i].y*v2[j].y;
}
}
for (int i = 0; i < maxn; i++) {
if (mul[i] != 0.0) cnt++;
}
cout << cnt;
for (int i = maxn-1; i >= 0; i--) {
if (mul[i] != 0.0) printf(" %d %.1f", i, mul[i]);
}
return 0;
}