上机训练实战指南-PAT Advance1009

题目链接

模拟题, 由于长时间不写代码了, 写的比较难看, 而且有一个测试点过不去, 懒得找了, 直接参考的别人代码

我的代码:

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值