天天看点

CCF甲级题目1037 Magic Coupon

题目大意:

给出两组数字,有正有负,求出第一组数字和第二组数字乘机的最大值的总和。

代码:

#include<algorithm>
#include<stdio.h>
using namespace std;
int c[100005];
int p[100005];
bool cmp(int a, int b) 
{
	return a > b;
}
int main()
{
	int nc, np;
	cin >> nc;
	for (int i = 0; i < nc; i++) 
    {
		cin >> c[i];
	}
	cin >> np;
	for (int i = 0; i < np; i++) 
    {
		cin >> p[i];
	}
	sort(c, c + nc, cmp);
	sort(p, p + np, cmp);
	int sum = 0;
	int indexp=np-1;
	int indexc=nc-1;
	while (true) 
    {
		if (p[indexp] < 0 && c[indexc] < 0&&indexp>=0&&indexc>=0) 
        {
			sum += p[indexp] * c[indexc];
			indexp--;
			indexc--;
	    }
		else break;
	}
	indexp = 0;
	indexc = 0;
	while (true) 
    {
		if (p[indexp] > 0 && c[indexc] > 0&&indexp<np&&indexc<nc) 
        {
			sum += p[indexp] * c[indexc];
			indexp++;
			indexc++;
		}
		else break;
	}
	cout << sum << endl;
	return 0;
}
           

继续阅读