计算总和一次排序即可
#include<iostream>
#include<algorithm>
#define N 111111
using namespace std;
bool cmp(int a,int b){
if(a>0||b>0)return a>b; //正数从大到小排序
return a<b; //负数从小到大排序
}
int main(){
int nc,np,coupon[N],good[N];
cin>>nc;
for(int i=0;i<nc;i++)cin>>coupon[i];
cin>>np;
for(int i=0;i<np;i++)cin>>good[i];
sort(coupon,coupon+nc,cmp);
sort(good,good+np,cmp);
int ic,ip,mul,sum=0;
for(ic=0,ip=0;ic<nc&&ip<np;ic++,ip++){
mul=coupon[ic]*good[ip];
if(mul>0)sum+=mul;
else if(coupon[ic]>0)ip--;
else ic--;
}
cout<<sum;
}