AcWing 1521. 超级简单的方法
原题链接
中等
用四个优先队列来写
优惠卷的数值的正数和负数,产品的价值的正数和负数
#include<bits/stdc++.h>
#define LL long long
using namespace std;
//需要改动数组直接改动N,M即可
const int N = 2e5 + 10, M = 1e3 + 10;
signed main() {
//关掉流同步,cin变快,但是不能用scanf,可以用printf;
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
priority_queue<int>q1;
priority_queue<int>q2;
priority_queue<int>q11;
priority_queue<int>q22;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x>0)
q1.push(x);
else
q11.push(-x);
}
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
int w;
cin>>w;
if(w>0)
q2.push(w);
else q22.push(-w);
}
int ans=0;
while(q1.size()&&q2.size())
{
auto t=q1.top();
q1.pop();
auto r=q2.top();
q2.pop();
if(t*r>0)
{
ans+=t*r;
}
}
while(q11.size()&&q22.size())
{
auto t=q11.top();
q11.pop();
auto r=q22.top();
q22.pop();
if(t*r>0)
{
ans+=t*r;
}
}
cout<<ans<<endl;
return 0;
}