原题:https://pintia.cn/problem-sets/15/problems/866
优先级队列定义:
priority_queue<int,vector<int>,greater<int> >q;//Int类型
//greater 默认为从小到大
//换成less 就是从大到小
本题思路:
将优惠券放入两个队列,分别是存放负值的队列和存放正值的队列;
存放负值的队列从小到大排序,存放正值的相反;
商品价值同理;
根据负负得正,正正还是正,我们将这两队队列一一出队并相乘再相加,得出的结果就是最优解
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q1,p1;//负队列从小到大
priority_queue<int,vector<int>,less<int> >q2,p2;//正从大到小
int main()
{
int n,m,x,sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&x);
if(x<0)q1.push(x);//负队列 从小到大排列
else q2.push(x);//正队列是从大到小排列
}
scanf("%d",&m);
for(in