【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 ...
随机推荐
- 22. Generate Parentheses (recursion algorithm)
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- c语言数组相关的计算
1.数组的创建:元素类型 数组名 [常量或者常量表达式] 如:int arr1[10];注:即使是被const修饰的变量也不能作为[]中的内容,它本质上依然属于变量,只是具有常量属性2.数组的初始化: ...
- 786A(博弈&bfs)
题目链接: http://codeforces.com/problemset/problem/786/A 题意: 一个环形路径编号为1-n,1号点为黑洞,玩家轮流让怪物前进若干步(从自己的操作集合里随 ...
- 2017-10-20 NOIP模拟赛2
P98 a [问题描述]你是能看到第一题的 friends 呢.——hja世界上没有什么比卖的这么贵的弹丸三还令人绝望的事了,所以便有了这么一道题.定义?(?)为满足(? × ?)|?的有序正整数对( ...
- Discuz!快速对接个人支付插件
## Discuz!快速对接个人支付插件 由于近期准备使用老牌论坛程序Discuz建立一个交流社区分享一些资源,但是测试了各种支付方式都不满意,偶然发现一个简直不要太完美的解决方案.今天抽时间搭建好并 ...
- windows cmd命令 mkdir生成多个文件bug问题
[问题现象] 有这样一个bat脚本,目的是为了根据时间创建文件夹 执行后却发现生产的文件夹有两个,名字被分开了,很是纳闷,一度以为自己哪里写错了 [问题原因] 经过查阅资料,一点一点的定位.发现是因为 ...
- final、权限、内部类
final.权限.内部类 final.权限.内部类 final.权限.内部类 final.权限.内部类 final.权限.内部类 final.权限.内部类
- springMvc配置 中文api
http://7xvpsh.com1.z0.glb.clouddn.com/publish/21-2/the-dispatcher-servlet.html springmvc4.1.7:配置 复制转 ...
- VSCode makedown增强插件
Markdown Preview Enhanced https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/
- @Import @bean,@Conditional @ConfigurationProperties @EnableConfigurationProperties 注解使用
一分钟学会spring注解之@Import注解http://blog.51cto.com/4247649/2118354 @Autowired与@Resource 注解的使用 https://www. ...