【CF799B】T-shirt buying(一道很水的小根堆)
大致题意: 有\(n\)件T恤衫,告诉你每件T恤衫的价格以及它正面和反面的颜色(\(1≤\)颜色的编号\(≤3\)),现在有m个顾客,已知每个人想要的衣服的颜色(一件T恤衫只要有一面的颜色满足他的需求即可),请你求出每个人所需支付的最低价格(一件T恤衫只能被买一次)。
题解
由于这道题的颜色最多只有\(3\)种,因此,我们只要开\(3\)个小根堆来存储每种颜色的衣服的价格和编号(价格为第一关键字)即可。
由于每件衣服只能被买一次,因此当一件衣服被买走之后,我们可以给它打个标记表示它已被买走,下次再遇到它时就可以直接跳过它了。
代码
#include<bits/stdc++.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define N 200000
using namespace std;
int n,Q,del[N+5];
struct clothes
{
	int a,b,pos,Price;
	bool operator < (const clothes a) const
	{
		return Price>a.Price;
	}
}s[N+5];
priority_queue<clothes> h[4];
inline char tc()
{
	static char ff[100000],*A=ff,*B=ff;
	return A==B&&(B=(A=ff)+fread(ff,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
	x=0;char ch;
	while(!isdigit(ch=tc()));
	while(x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline void write(int x)
{
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
int main()
{
	register int i;
	for(read(n),i=1;i<=n;++i) read(s[i].Price);
	for(i=1;i<=n;++i) read(s[i].a),s[i].pos=i;
	for(i=1;i<=n;++i) read(s[i].b),h[s[i].a].push(s[i]),h[s[i].b].push(s[i]);
	for(read(Q);Q;--Q)
	{
		int x;read(x);
		while(!h[x].empty()&&del[h[x].top().pos]) h[x].pop();//若当前的衣服已被买走,则直接跳过它
		if(h[x].empty()) putchar('-'),putchar('1'),putchar(' ');//如果堆已空,说明没有这种颜色的衣服了,输出-1
		else write(h[x].top().Price),putchar(' '),del[h[x].top().pos]=1,h[x].pop();//输出答案,并标记这件衣服已被买走
	}
	return 0;
}
												
											【CF799B】T-shirt buying(一道很水的小根堆)的更多相关文章
- 【jQuery基础学习】09 jQuery与前端(这章很水)
		
这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的. 关于网站结构 文件结构 前端文件分三个文件夹放 images文件夹用来存放将要用到的图 ...
 - 一道很经典的 BFS 题
		
一道很经典的 BFS 题 想认真的写篇题解. 题目来自:https://www.luogu.org/problemnew/show/P1126 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运 ...
 - 做了一道cf水题
		
被一道cf水题卡了半天的时间,主要原因时自己不熟悉c++stl库的函数,本来一个可以用库解决的问题,我用c语言模拟了那个函数半天,结果还超时了. 题意大概就是,给定n个数,查询k次,每次查询过后,输出 ...
 - 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]-CodeForces 236A,虽然很水,但有一个很简单的函数用起来方便
		
A. Boy or Girl time limit per test 1 second memory limit per test 256 megabytes input standard input ...
 - FZU 2205 据说题目很水
		
2205 据说题目很水 Accept: 199 Submit: 458Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Descr ...
 - 一道cf水题再加两道紫薯题的感悟
		
. 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. . 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整 ...
 - ZOJ2006 一道很尴尬的string操作题
		
ZOJ2006(最小表示法) 题目大意:输出第一个字符串的最小字典序字串的下标! 然后我居然想试一试string的erase的能力,暴力一下,然后20msAC了,尴尬的数据.......... #in ...
 - Javascript中的Microtask和Macrotask——从一道很少有人能答对的题目说起
		
首先我们来看一道题目,如下javascript代码,执行后会在控制台打印出什么内容? async function async1() { console.log('async1 start'); aw ...
 - 一道很有意思的java线程题
		
这几天看结城浩的<java多线程设计模式>,跟着做一些习题,有几道题目很有意思,记录下自己的体会. 首先是题目(在原书212页,书尾有解答): public class Main { pu ...
 
随机推荐
- explain SQL语句()
			
坊间有传言:MySQL性能优化有个神器,叫做explain,它可以对select语句进行分析并且输出详细的select执行过程的详细信息,让开发者从这些信息中获得优化的思路. 下面来讲讲这个MySQL ...
 - ps怎样简单快速去除图片上的文字
			
具体步骤如下: 1.选择"修补工具": 2.在公共栏中选择"源": 3."图像"->"模式"中选择"RG ...
 - any cpu ×86 ×64
			
On a 32-bit machine: Any CPU: runs as a 32-bit process, can load Any CPU and x86 assemblies, will ge ...
 - Objective-C的Runtime System
			
[0] Outline -- [1] 版本和平台 -- [2] 与Runtime System交互 -- [3] 方法的动态决议 -- [4] 消息转发 -- [5] 类型编码 -- [6 ...
 - promise封装小程序的请求类(request,清爽易懂)
			
话不多说直接上代码,清爽易懂: import { config } from '../config.js' const tips = { 1:'抱歉出现了一个错误', 2:'网络错误', 1005:' ...
 - 如何在html文件中导入header、footer等
			
1.include是php函数,所以确实需要转化成.php文件--(其实除了用php,html都有自带的引入方法)2.html转化为php文件很简单,直接改一下后缀名就可以了--(如:index.ht ...
 - POJ1036  Gangsters
			
题目来源:http://poj.org/problem?id=1036 题目大意: 有N个强盗要进入一家饭店打劫,第i个强盗在Ti时刻到达,会抢到Pi的财产.饭店的门有K+1状态,门打开的程度为[0, ...
 - LeetCode初级算法(数组)解答
			
这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...
 - 73th LeetCode Weekly Contest Custom Sort String
			
S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S was sort ...
 - ubuntu apache2 https
			
1. enable the module ssl by: sudo a2enmod ssl 2.after you have enabled module ssl , you will have to ...