这一题关键是把正负数分开存储,不然可能出现超时的情况
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
using namespace std;
int sum=0;
void caculate(vector<int> a,vector<int> b )
{
for(int i=0;i<a.size()&&i<b.size();i++)
sum+=a[i]*b[i];
}
bool cmp(int A,int B)
{
return A>B;
}
int main()
{
int nc,np;
vector<int> ncou,cou,npro,pro;
int t;
scanf("%d",&nc);
for(int i=0;i<nc;i++)
{
scanf("%d",&t);
if(t>0)
cou.push_back(t);
else
ncou.push_back(t);
}
scanf("%d",&np);
for(int i=0;i<np;i++)
{
scanf("%d",&t);
if(t>0)
pro.push_back(t);
else
npro.push_back(t);
}
sort(cou.begin(),cou.end(),cmp);
sort(pro.begin(),pro.end(),cmp);
sort(ncou.begin(),ncou.end());
sort(npro.begin(),npro.end());
caculate(cou,pro);
caculate(ncou,npro);
printf("%d\n",sum);
return 0;
}
本文介绍了一种通过将正负数分离存储来优化计算效率的算法实现方案。该算法适用于需要大量数值运算的场景,能够有效避免计算过程中的超时问题。文中详细展示了使用C++实现的具体代码,并通过实例解释了如何对输入的正负整数进行分类和排序,最后计算它们之间的乘积总和。
439

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



