思路:
先输入T恤正反两面的颜色,因为只有3种颜色,所以可以用哈希来做。
在颜色的优先队列中存放价格,便宜的在前面。然后边输入客人需要的颜色,边处理。找到这种颜色对应的队列,如果有一个T恤对应的价格,输出价格,并弹出价格。如果没有输出-1。
代码:
#include<iostream>
#include<queue>
using namespace std;
struct node{
int id,p,a,b;
friend bool operator<(node x,node y){
return x.p>y.p;
}//重定义小于号
};
int vis[2*100005];
priority_queue<node> q[4];//颜色队列
node ts[2*100005];
int main(){
int n,m,f;
cin>>n;
for(int i=1;i<=n;i++){
cin>>ts[i].p;
ts[i].id=i;
}
for(int i=1;i<=n;i++){
cin>>ts[i].a;
}
for(int i=1;i<=n;i++){
cin>>ts[i].b;
}
for(int i=1;i<=n;i++){
if(ts[i].a==ts[i].b){
q[ts[i].a].push(ts[i]);
}else{
q[ts[i].a].push(ts[i]);
q[ts[i].b].push(ts[i]);
}
}
cin>>m;
while(m--){
cin>>f;
int val=-1;//如果找不到,输出的是初始值-1.
while(!q[f].empty()){//要判断是否为空
node cur=q[f].top();
q[f].pop();//卖走一个
if(vis[cur.id]==true){
continue;
}
vis[cur.id]=true;
val=cur.p;
break;
}
cout<<val<<" ";
}
return 0;
}