CodeForce-799B T-shirt buying (STL_set)
有 n 件T恤。第 i 件T恤的价格为 pi 。每个T恤有两面,第 i 件T恤正面颜色为 ai ,反面颜色为 bi 。
有 m 个人想买T恤,每个人都恰好买一件。第 j 个人最喜欢颜色 cj。
一个人会选择买一件至少有一面颜色为他喜欢的颜色的,最便宜的T恤。如果没有合法的T恤,则不买。这些人按照给定的顺序来购买。
你的任务是求出每个人会花多少钱。
第一行包含一个整数 n (1 ≤ n ≤ 200 000) — 表示T恤的数量。
之后一行为 p1, p2, ..., pn (1 ≤ pi ≤ 1 000 000 000), pi 表示第 i 件T恤的价格。
之后一行为 a1, a2, ..., an (1 ≤ ai ≤ 3), ai 表示第 i 件T恤正面的颜色。
之后一行为 b1, b2, ..., bn (1 ≤ bi ≤ 3), bi 表示第 i 件T恤背面的颜色。
之后一行包含一个整数 m (1 ≤ m ≤ 200 000) — 表示消费者人数。
之后一行为 c1, c2, ..., cm (1 ≤ cj ≤ 3), where cj表示第 j 个消费者最喜欢的颜色。这些消费者会按输入的顺序一个一个来购买。
Output
一行 m 个数 — 第 j 个数表示第 j-th buyer will buy. If the j 个消费者需要花的钱数。如果不购买,输出 -1。
Example
5
300 200 400 500 911
1 2 1 2 3
2 1 3 2 1
6
2 3 1 2 1 1
200 400 300 500 911 -1
2
1000000000 1
1 1
1 2
2
2 1
1 1000000000
由于题目说了,每件衣服的价格都一定不同,所以可以用set。
c++ stl容器set成员函数:insert()--在集合中插入元素。
{
Extends the container by inserting new elements, effectively increasing the container size by the number of elements inserted.
//通过插入新元素来扩展容器,通过插入的元素数量有效地增加容器大小。
Because elements in a set are
unique, the insertion operation checks whether each inserted element is
equivalent to an element already in the container, and if so, the
element is not inserted, returning an iterator to this existing element
(if the function returns a value).
//因为集合中的元素是唯一的,所以插入操作检查每个插入的元素是否等同于已经在容器中的元素,如果是,则不插入元素,将迭代器返回到此现有元素(如果函数有返回值)。
Internally, set containers keep all their elements sorted following the criterion specified by its comparison object. The elements are always inserted in its respective position following this ordering.
//在内部,设置容器使其所有元素按照其比较对象指定的标准进行排序。 这些元件总是插入其相应的位置。
}
c++ stl容器set成员函数:empty()--如果集合为空,返回true。
c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器。
c++ stl容器set成员函数:erase()--删除集合中的元素。
#include<bits/stdc++.h>
using namespace std;
int shirts[200050];
int main()
{
int n;
cin>>n;
set<int> cost[4];
for(int i=0;i<n;i++)
cin>>shirts[i];
for(int i=0;i<2*n;i++)
{
int input;
cin>>input;
cost[input].insert(shirts[i%n]);
}
int m;
cin>>m;
while(m--)
{
int color;
cin>>color;
if(cost[color].empty()) cout<<"-1 ";
else
{
int ans= *cost[color].begin();
cout<<ans<<" ";
for(int i=1;i<=3;i++)
cost[i].erase(ans);
}
}
cout<<endl;
return 0;
}
CodeForce-799B T-shirt buying (STL_set)的更多相关文章
- 【codeforces 799B】T-shirt buying
[题目链接]:http://codeforces.com/contest/799/problem/B [题意] 告诉你每个人喜欢的衣服的颜色; 然后告诉你每件衣服的正面和背面的颜色以及它的价格; 只要 ...
- T-shirt buying CodeForces - 799B (小根堆+STL)
题目链接 思路: 由于题目说了只有1,2,3,三种色号的衣服,然后开三个对应色号的小根堆, 我是根据pair<int,int> 创建了一个以价格小的优先的优先队列. pair中的另外一个i ...
- CF 799B T-shirt buying
一道超级水的练习STL的题目 题目大意:有\(n\)件T恤,每件T恤都分别有价格(每件衣服的价格不重复).前面的颜色.背部的颜色三种属性.接下来有\(m\)个人每个人都有一种喜欢的颜色,他们按先后顺序 ...
- Codeforces 799B - T-shirt buying(STL)
题目链接:http://codeforces.com/problemset/problem/799/B 题目大意:有n件T恤,每件T体恤都分别有价格(每件衣服的价格不重复).前面的颜色.背部的颜色三种 ...
- CodeForces - 799B T-shirt buying 【贪心】
题目链接 http://codeforces.com/problemset/problem/799/B 题意 给出N件衣服 pi 表示 第i件衣服的价格 ai 表示 第i件衣服的前面的颜色 bi 表示 ...
- ACM BUYING FEED
BUYING FEED 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 Farmer John needs to travel to town to pick up ...
- Codeforce - Street Lamps
Bahosain is walking in a street of N blocks. Each block is either empty or has one lamp. If there is ...
- [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草
[BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...
- Codeforce Round #216 Div2
e,还是写一下这次的codeforce吧...庆祝这个月的开始,看自己有能,b到什么样! cf的第二题,脑抽的交了错两次后过了pretest然后system的挂了..脑子里还有自己要挂的感觉,果然回头 ...
随机推荐
- JVM G1GC的算法与实现
G1GC 是什么? 一些基本概念 实时性 G1GC 有什么特点? G1GC 的堆结构是什么样的? G1GC 的执行过程是什么样的? 并发标记 并发标记是什么 标记位图 执行步骤 步骤 1--初始标记阶 ...
- 计算机网络:基于iptalbes的SANT和DNAT|docker的服务器发布项目--超详细一看就会
项目说明: 模拟企业让内网服务器可以上网,同时发布内网的服务器 1.实验环 我们需要准备三台linux系统,一台作为路由器机route,其它为客户机client-1.client-2 主机改名 ho ...
- DVWA靶场之SQL injection(blind)通关
盲注,顾名思义,无法从界面上直接查看到执行结果,一般的SQL注入基本绝迹,最多的就是盲注 基本步骤:(由于没有回显了,相比一般的SQL注入,也就不需要确定查询字段数.判断回显位置了) 判断注入类型 破 ...
- noip18
T1 来自cf原题 考场直接暴力枚举 \(A,B\),15pts. 正解: 首先时间的表达式,\(T=\frac{A}{a_{i}}+\frac{B}{b_{i}}\),然后以\(\frac{1}{a ...
- SpringBoot-AOP记录操作日志
package com.meeno.inner.oa.extend.operaterecord.aop; import com.alibaba.fastjson.JSONArray; import c ...
- Linux第一个动态库
动态库一般以.so结尾,就是shared object的意思. 其基本生成步骤为 ⑴编写函数代码 ⑵编译生成动态库文件,要加上 -shared 和 -fpic 选项 , 库文件名以li ...
- .net core signalR 全局异常处理
Hub的异常拦截 { } { } *:first-child { } *:last-child { } { } { } { } { } { } { } { } { } { } h6:first-chi ...
- .net core api 对于FromBody的参数验证
前言 在framework的mvc中,经常会使用 Model.State . ModelState.IsValid 配合着特性进行参数验证,通过这种方式可以降低controller的复杂度,使用方便. ...
- Object--Date--calendar--System--StringBuilder--基本数据类型包装类型
Object java.lang.Object类是Java语言中的根类,即所有类的父类 默认toString()方法打印的是对象在堆中的地址值 默认equals()方法比较的也是地址(String中对 ...
- cookie实现访问时间查看
package day01.cookies; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEn ...