题目链接:
https://pintia.cn/problem-sets/994805342720868352/problems/994805451374313472
题目分析:
简单地数学模拟。
参考代码:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn=100010;
int Nc, Np, C[maxn], P[maxn], i, j;
int main()
{
scanf("%d", &Nc);
for(int i = 0; i < Nc; i++){
scanf("%d", &C[i]);
}
scanf("%d",&Np);
for(int i = 0; i < Np; i++){
scanf("%d", &P[i]);
}
sort(C, C + Nc);// 从小到大排序
sort(P, P + Np);
ll sum = 0;
for(i = Nc - 1,j = Np - 1; C[i] > 0 && P[j] > 0 && i >=0 && j >=0; i--,j--){
sum += C[i]*P[j];
}
for(i = 0 ,j = 0; C[i] < 0 && P[j] < 0 && i < Nc && j < Np ; i++ ,j++){
sum += C[i]*P[j];
}
printf("%lld",sum);
return 0;
}
本文解析了一个基于数学模拟的编程题目,通过排序和配对策略,实现了两个数组元素的有效相乘,以达到最大或最小的乘积和。代码使用C++实现,展示了如何处理正数和负数的不同情况。
323

被折叠的 条评论
为什么被折叠?



