分了四个组 然后排序 正的大的放前面 负的小的放前面 然后加起来。
#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;}
新闻热点
疑难解答