题目大意

  有一些衣服,它们有价格、正面的颜色和反面的颜色。现有一群顾客按顺序来买存在某颜色且价格最低的衣服(不存在则不会买),求每个顾客花了多少钱。

思路

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std; const int MAX_OBJ = 200010, MAX_COLOR = 5;
int TotObj; struct Obj
{
int Price, A, B;
bool Vis;
}_objs[MAX_OBJ]; struct Cmp
{
bool operator () (Obj *a, Obj *b)
{
return a->Price > b->Price;
}
}; priority_queue<Obj*, vector<Obj*>, Cmp> q[3][MAX_COLOR]; int main()
{
scanf("%d", &TotObj);
for (int i = 1; i <= TotObj; i++)
scanf("%d", &_objs[i].Price);
for (int i = 1; i <= TotObj; i++)
{
scanf("%d", &_objs[i].A);
q[1][_objs[i].A].push(_objs + i);
}
for (int i = 1; i <= TotObj; i++)
{
scanf("%d", &_objs[i].B);
q[2][_objs[i].B].push(_objs + i);
}
int opCnt;
scanf("%d", &opCnt);
while(opCnt--)
{
int color;
scanf("%d", &color); while(!q[1][color].empty() && q[1][color].top()->Vis)
q[1][color].pop();
Obj *obj1 = q[1][color].empty() ? NULL : q[1][color].top();
while(!q[2][color].empty() && q[2][color].top()->Vis)
q[2][color].pop();
Obj *obj2 = q[2][color].empty() ? NULL : q[2][color].top(); Obj *ans = obj1 && obj2 ? (obj1->Price < obj2->Price ? obj1 : obj2) : obj1 ? obj1 : obj2;
bool Is1 = obj1 && obj2 ? (obj1->Price < obj2->Price) : (obj1 != NULL);
if (!ans)
printf("-1 ");
else
{
printf("%d ", ans->Price);
ans->Vis = true;
q[Is1 ? 1 : 2][Is1 ? ans->A : ans->B].pop();
}
}
return 0;
}

  

CF799B T-shirt buying的更多相关文章

  1. 【CF799B】T-shirt buying(一道很水的小根堆)

    点此看题面 大致题意: 有\(n\)件T恤衫,告诉你每件T恤衫的价格以及它正面和反面的颜色(\(1≤\)颜色的编号\(≤3\)),现在有m个顾客,已知每个人想要的衣服的颜色(一件T恤衫只要有一面的颜色 ...

  2. ACM BUYING FEED

    BUYING FEED 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 Farmer John needs to travel to town to pick up ...

  3. [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草

    [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...

  4. uva 10626 - Buying Coke(记忆化搜索)

    题目链接:10626 - Buying Coke 题目大意:给出要买可乐的数量, 以及1元,5元和10元硬币的数量, 每瓶可乐8元,每次照钱会按照最少硬币的方式找回, 问如何投币可使得投入的硬币数最少 ...

  5. BZOJ 1618: [Usaco2008 Nov]Buying Hay 购买干草( dp )

    无限背包dp.. 因为题目中说至少到 H 磅 , 我就直接把 H * 2 了.. ----------------------------------------------------------- ...

  6. BZOJ 1618: [Usaco2008 Nov]Buying Hay 购买干草

    题目 1618: [Usaco2008 Nov]Buying Hay 购买干草 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 679  Solved:  ...

  7. 2020: [Usaco2010 Jan]Buying Feed, II

    2020: [Usaco2010 Jan]Buying Feed, II Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 220  Solved: 162[ ...

  8. 新概念英语(1-11)Is this your shirt ?

    Is this your shirt?Whose shirt is white? A:Whose shirt is that? Is this your shirt, Dave? Dave:No si ...

  9. Windows 10文件夹Shirt+鼠标右键出现“在此处打开命令窗口”

    Windows 10文件夹Shirt+鼠标右键出现“在此处打开命令窗口” Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directo ...

随机推荐

  1. Spring.net(v1.3.2) 官网API-第一章 前言

    虽然有很好的工具和技术,但是开发软件应用仍然是很困难的.Spring为构建企业级应用提供了一个轻量级的解决方案,Spring提供了一个统一的.透明的方式去配置你的应用,和将AOP集成到你的软件中.Sp ...

  2. PD(Power Delivery)充电协议

    关于PD的历史进程,可以在我转载的另一篇文章中了解 http://www.cnblogs.com/Hello-words/p/7851627.html PD 1.0 用的是 BFSK在 VBUS上进行 ...

  3. servlet-响应信息

    package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.ser ...

  4. Effective Java中文版

    译者序 序 前言 第一章 引言 第二章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造函数 第2条:使用私有构造函数强化singleton属性 第3条:通过私有构造函数强化不可实例化属性 第4条: ...

  5. Android中Adapter和Bridge模式理解和应用

    一 Adapter模式 意图: 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作. 适用性: 使用一个已存在的类,而它的接口 ...

  6. Python 之pytesseract模块读取知乎验证码案例

    import pytesseract from PIL import Image import requests import time # 获取只会验证码图片并保存为本地 def get_data_ ...

  7. Python 之多线程应用

    import socket from threading import Thread def recv_data(): while True: recv_info = udp_socket.recvf ...

  8. 用python写一个百度翻译

    运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...

  9. BZOJ 2096: [Poi2010]Pilots 单调队列

    Code: #include<bits/stdc++.h> #define maxn 4000000 using namespace std; void setIO(string s) { ...

  10. hdu 4018 Parsing URL(字符串截取)

    题目 以下引用自百度百科: sscanf 的相关用法 头文件:#include<stdio.h>     1. 常见用法. 1 2 3 charbuf[512]; sscanf(" ...