题意:给定一堆衣服和价格 每个衣服有正反两面 每面都有颜色 每个顾客会选择自己喜欢的颜色并且价格最低的衣服 输出卖出衣服的顺序
思路:用优先队列维护每个衣服 贪心满足条件的价格最低的衣服
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#define max_ 200010
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
struct node
{
int num;
int order;
bool operator < (const node &a)const
{
return a.num<num;
}
}e;
struct node p[max_];
int n;
bool vis[max_];
priority_queue<node>q[4];
int main(int argc, char const *argv[])
{
scanf("%d",&n);
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&p[i].num);
p[i].order=i;
}
for(i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
q[x].push(p[i]);
vis[i]=true;
}
for(i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
q[x].push(p[i]);
}
int m;
scanf("%d",&m);
while(m--)
{
int x;
scanf("%d",&x);
while(1)
{
if(q[x].size()==0)
{
printf("-1 ");
break;
}
else
{
e=q[x].top();
q[x].pop();
int v=e.order;
if(vis[v]==false)
continue;
else
{
printf("%d ",e.num);
vis[v]=false;
break;
}
}
}
}
return 0;
}