C++代码
#include <bits/stdc++.h>
using namespace std;
vector<int> PositiveCoup, PositiveProd, NegetiveCoup, NegetiveProd;
bool cmp(int a, int b)
{
return abs(a) > abs(b);
}
int main()
{
int Nc, Np;
int tmpnum;
cin >> Nc;
for (int i = 0; i < Nc; ++i)
{
cin >> tmpnum;
if (tmpnum > 0)
{
PositiveCoup.push_back(tmpnum);
}
else if (tmpnum < 0)
{
NegetiveCoup.push_back(tmpnum);
}
}
cin >> Np;
for (int i = 0; i < Np; ++i)
{
cin >> tmpnum;
if (tmpnum > 0)
{
PositiveProd.push_back(tmpnum);
}
else if (tmpnum < 0)
{
NegetiveProd.push_back(tmpnum);
}
}
sort(PositiveCoup.begin(), PositiveCoup.end(), cmp);
sort(NegetiveCoup.begin(), NegetiveCoup.end(), cmp);
sort(PositiveProd.begin(), PositiveProd.end(), cmp);
sort(NegetiveProd.begin(), NegetiveProd.end(), cmp);
long long res = 0;
int k = 0;
while (k < PositiveCoup.size() && k < PositiveProd.size())
{
res += PositiveCoup[k] * PositiveProd[k];
++k;
}
k = 0;
while (k < NegetiveCoup.size() && k < NegetiveProd.size())
{
res += NegetiveCoup[k] * NegetiveProd[k];
++k;
}
cout << res;
return 0;
}