这一题关键是把正负数分开存储,不然可能出现超时的情况
#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;
}