模拟题, 由于长时间不写代码了, 写的比较难看, 而且有一个测试点过不去, 懒得找了, 直接参考的别人代码
我的代码:
#include <algorithm>
#include <iostream>
const int N = 2002;
double res[N], a_c[N], b_c[N];
int a_e[N], b_e[N];
using namespace std;
int main() {
int m, n;
cin >> m;
for (int i = 1; i <= m; i++) {
cin >> a_e[i] >> a_c[i];
}
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> b_e[i] >> b_c[i];
}
for (int i = 1; i <= m; i++){
for (int j = 1; j <= n; j++){
int t1 = a_e[i] + b_e[j];
double t2 = a_c[i] * b_c[j];
res[t1] += t2;
}
}
int ww = 0;
for (int i = 1; i <= N; i++) {
if (res[i] != 0) ww++;
}
cout << ww ;
for (int i = N; i >= 1; i--) {
if (res[i] != 0) {
printf(" %d %.1f", i, res[i]);
}
}
return 0;
}
通过代码:
#include <iostream>
using namespace std;
int main() {
int n1, n2, a, cnt = 0;
scanf("%d", &n1);
double b, arr[1001] = {0.0}, ans[2001] = {0.0};
for(int i = 0; i < n1; i++) {
scanf("%d %lf", &a, &b);
arr[a] = b;
}
scanf("%d", &n2);
for(int i = 0; i < n2; i++) {
scanf("%d %lf", &a, &b);
for(int j = 0; j < 1001; j++)
ans[j + a] += arr[j] * b;
}
for(int i = 2000; i >= 0; i--)
if(ans[i] != 0.0) cnt++;
printf("%d", cnt);
for(int i = 2000; i >= 0; i--)
if(ans[i] != 0.0)
printf(" %d %.1f", i, ans[i]);
return 0;
}