感觉自己写的有点琐碎
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100010;
bool cmp1(int c,int d)
{
return c>d;
}
bool cmp2(int c,int d)
{
return c<d;
}
int main()
{
int a1[maxn],a2[maxn],b1[maxn],b2[maxn],n,m,temp,ans=0;
int num1=0,num2=0;
cin>>n;
for (int i=0;i<n;i++)
{
scanf("%d",&temp);
if (temp>0)
a1[num1++]=temp;
else if(temp<0)
a2[num2++]=temp;
}
int num3=0,num4=0;
cin>>m;
for (int i=0;i<m;i++)
{
scanf("%d",&temp);
if (temp>0)
b1[num3++]=temp;
else if(temp<0)
b2[num4++]=temp;
}
sort(a1,a1+num1,cmp1);
sort(a2,a2+num2,cmp2);
sort(b1,b1+num3,cmp1);
sort(b2,b2+num4,cmp2);
if(num1>num3)
num1=num3;
for (int i=0;i<num1;i++)
ans+=a1[i]*b1[i];
if(num2>num4)
num2=num4;
for (int i=0;i<num2;i++)
ans+=a2[i]*b2[i];
printf("%d",ans);
}