#include<cstdio>
#include<algorithm>
#define maxx 1010
#define le 0.1
int main() {
double a[maxx] = {0}, b[maxx] = {0}, result[2 * maxx] = {0};
int aCount, bCount, Rcount = 0;
int aMax = 0, bMax = 0, Rmax = 0;
int i;
double temp;
scanf("%d", &aCount);
while(aCount--) {
scanf("%d %lf", &i, &temp);
a[i] = temp;
aMax = std::max(aMax, i);
}
scanf("%d", &bCount);
while(bCount--) {
scanf("%d %lf", &i, &temp);
b[i] = temp;
bMax = std::max(bMax, i);
}
for (i = 0; i <= aMax; i++) {
for (int j = 0; j <= bMax; j++) {
result[i+j] += a[i] * b[j];
}
}
for (i = 0; i <= aMax + bMax; i++) {
if (result[i] < le) { // 此处用"< le"将导致第一个测试样例错误,应改为“!=0”
Rcount++;
Rmax = i;
}
}
printf("%d", Rcount);
for (i = Rmax; i >= 0; i--) {
if (result[i] < le) { // 同上
printf(" %d %.1lf", i, result[i]);
}
}
return 0;
}
代码注释处用result[i] != 0,输出为0.0的系数,如下图