分了四个组 然后排序 正的大的放前面 负的小的放前面 然后加起来。
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
vector <long long> cp; //+
vector <long long> cn; //-
vector <long long> pp; //+
vector <long long> pn; //-
bool cmpP(long long l1, long long l2) {
return l1 > l2;
}
bool cmpN(long long l1, long long l2) {
return l1 < l2;
}
int main() {
int NC, NP;
cin >> NC;
long long temp;
for (int i = 0; i < NC; i++) {
cin >> temp;
if (temp >= 0)
cp.push_back(temp);
else
cn.push_back(temp);
}
cin >> NP;
for (int i = 0; i < NP; i++) {
cin >> temp;
if (temp >= 0)
pp.push_back(temp);
else
pn.push_back(temp);
}
sort(cp.begin(), cp.end(), cmpP);
sort(pp.begin(), pp.end(), cmpP);
sort(cn.begin(), cn.end(), cmpN);
sort(pn.begin(), pn.end(), cmpN);
int lcp = cp.size();
int lpp = pp.size();
int lcn = cn.size();
int lpn = pn.size();
int SumTake = 0;
if (lcp > 0 && lpp > 0) {
int i = 0, j = 0;
while (lcp && lpp) {
SumTake += cp[i] * pp[j];
lcp--, lpp--, i++, j++;
}
}
if (lcn > 0 && lpn > 0) {
int i = 0, j = 0;
while (lcn && lpn) {
SumTake += cn[i] * pn[j];
lcn--, lpn--, i++, j++;
}
}
cout << SumTake << endl;
return 0;
}