分了四個組 然后排序 正的大的放前面 負的小的放前面 然后加起來。
#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;}
新聞熱點
疑難解答