codeforces round #412 B. T-shirt buying

来源:互联网 发布:拨号软件 编辑:程序博客网 时间:2024/05/16 15:31
题意: 商店有n个价格完全不一样的衣服,正反两面都有颜色,颜色可以为(1,2,3),m个客户依次来买衣服,分别给出他们想要的颜色,只要正反至少其中一个包含这个颜色,然后客户在选定颜色情况下买最便宜的,分别输出他们应付的钱,没有这个颜色的衣服就输出-1;
思路:定义三个优先队列,分别存1,2,3颜色的衣服,在用set映射记录哪些衣服被选了(因为衣服价格是完全不同的);

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <set>
using namespace std;
const int maxn = 200000+10;
priority_queue<int,vector<int>,greater<int> >pque1,pque2,pque3;
int a[maxn];
int b[maxn];
int p[maxn];
int c[maxn];
set<int>s;
int main()
{
    int n;
    cin>>n;
//    memset(pd,0,sizeof(pd));
    for(int i = 1;i<=n;i++)
    {
        cin>>p[i];
    }
    for(int i = 1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i = 1;i<=n;i++)
    {
        cin>>b[i];
    }
    int m;
    cin>>m;
    for(int i = 1;i<=m;i++)
    {
        cin>>c[i];
    }
    for(int i = 1;i<=n;i++)
    {
        if(a[i]==1)
        {
            pque1.push(p[i]);
        }
        else if(a[i]==2)
        {
            pque2.push(p[i]);
        }
        else if(a[i]==3)
        {
            pque3.push(p[i]);
        }
        if(b[i]==1)
        {
            pque1.push(p[i]);
        }
        else if(b[i]==2)
        {
            pque2.push(p[i]);
        }
        else if(b[i]==3)
        {
            pque3.push(p[i]);
        }
    }
    //int maxx = 0;
    for(int i = 1;i<=m;i++)
    {
        if(i==m)
        {
            if(c[i]==1)
        {
            while(!pque1.empty())
            {
                int p = pque1.top();
                if(s.find(p)==s.end())
                {
                    cout<<p;
                    s.insert(p);
                    break;
                }
                pque1.pop();
            }
            if(pque1.empty())
                cout<<"-1";
        }
        else if(c[i]==2)
        {
            while(!pque2.empty())
            {
                int p = pque2.top();
                if(s.find(p)==s.end())
                {
                    cout<<p;
                    s.insert(p);
                    break;
                }
                pque2.pop();
            }
            if(pque2.empty())
                cout<<"-1";
        }
        else if(c[i]==3)
        {
            while(!pque3.empty())
            {
                int p = pque3.top();
                if(s.find(p)==s.end())
                {
                    cout<<p;
                    s.insert(p);
                    break;
                }
                pque3.pop();
            }
            if(pque3.empty())
                cout<<"-1";
        }
        return 0;
        }
        if(c[i]==1)
        {
            while(!pque1.empty())
            {
                int p = pque1.top();
                if(s.find(p)==s.end())
                {
                    cout<<p<<' ';
                    s.insert(p);
                    break;
                }
                pque1.pop();
            }
            if(pque1.empty())
                cout<<"-1 ";
        }
        else if(c[i]==2)
        {
            while(!pque2.empty())
            {
                int p = pque2.top();
                if(s.find(p)==s.end())
                {
                    cout<<p<<' ';
                    s.insert(p);
                    break;
                }
                pque2.pop();
            }
            if(pque2.empty())
                cout<<"-1 ";
        }
        else if(c[i]==3)
        {
            while(!pque3.empty())
            {
                int p = pque3.top();
                if(s.find(p)==s.end())
                {
                    cout<<p<<' ';
                    s.insert(p);
                    break;
                }
                pque3.pop();
            }
            if(pque3.empty())
                cout<<"-1 ";
        }
    }
    return 0;
}
0 0
原创粉丝点击