CodeForces - 799B T-shirt buying 【贪心】
题目链接
http://codeforces.com/problemset/problem/799/B
题意
给出N件衣服
pi 表示 第i件衣服的价格
ai 表示 第i件衣服的前面的颜色
bi 表示 第i件衣服的后面的颜色
然后有 m 位顾客
顾客会给出 他中意的颜色 只要 衣服的前面或者后面有这个颜色 那么 这件衣服 就是符合要求的 然后他要购买 目前还剩下的 最便宜的那件
先来先服务原则 并且 每件衣服 只有一件
思路
用 三个 vector 来保存 三个颜色的衣服 卖出 后 要标记一下
刚开始 T 了 因为我们每次都是从 头开始遍历的
后来想想 可以用三个 标记 分别标记 三个 vector 的头 这样 前面已经遍历过的 就可以不用 遍历 (还是 大佬提醒 才做出来)
刚开始 要给这三个 vector sort
对了 这个 价格 应该都是不同的 因为用 sort 都能过
大佬 给普及了一下 sort 的效率 最快是 nlogn 只有当 每个元素都不同时
最慢是 n^2 每个元素都相同时
插入排序是比较稳定的 nlogn
AC代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
#include<set>
#include<list>
#include<vector>
#include<deque>
#include<stack>
#define ll long long
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=2e5+10;
struct node
{
int v, id;
}q[maxn];
vector <node> c[3];
int visit[maxn];
bool comp(node x, node y)
{
return x.v < y.v;
}
int main()
{
memset(visit, 0, sizeof(visit));
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &q[i].v);
q[i].id = i;
}
int color;
for (int i = 0; i < n; i++)
{
scanf("%d", &color);
c[color - 1].push_back(q[i]);
}
for (int i = 0; i < n; i++)
{
scanf("%d", &color);
c[color - 1].push_back(q[i]);
}
sort(c[0].begin(), c[0].end(), comp);
sort(c[1].begin(), c[1].end(), comp);
sort(c[2].begin(), c[2].end(), comp);
int m;
scanf("%d", &m);
int count[3] = {0};
int flag[3] = {0};
for (int i = 0; i < m; i++)
{
scanf("%d", &color);
if (i)
printf(" ");
int len = c[color - 1].size();
if (count[color - 1] >= len)
{
printf("-1");
continue;
}
int ans = -1;
for (int j = flag[color - 1]; j < len; j++)
{
if (visit[c[color - 1][j].id] == 0)
{
visit[c[color - 1][j].id] = 1;
ans = c[color - 1][j].v;
count[color - 1]++;
flag[color - 1] = j + 1;
break;
}
}
printf("%d", ans);
}
printf("\n");
}
CodeForces - 799B T-shirt buying 【贪心】的更多相关文章
- 【codeforces 799B】T-shirt buying
[题目链接]:http://codeforces.com/contest/799/problem/B [题意] 告诉你每个人喜欢的衣服的颜色; 然后告诉你每件衣服的正面和背面的颜色以及它的价格; 只要 ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- codeforces Gym 100338E Numbers (贪心,实现)
题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...
- [Codeforces 1214A]Optimal Currency Exchange(贪心)
[Codeforces 1214A]Optimal Currency Exchange(贪心) 题面 题面较长,略 分析 这个A题稍微有点思维难度,比赛的时候被孙了一下 贪心的思路是,我们换面值越小的 ...
- Codeforces 1136D - Nastya Is Buying Lunch - [贪心+链表+map]
题目链接:https://codeforces.com/problemset/problem/1136/D 题意: 给出 $1 \sim n$ 的某个排列 $p$,再给出若干 $(x,y)$ 表示当序 ...
- Codeforces 799B - T-shirt buying(STL)
题目链接:http://codeforces.com/problemset/problem/799/B 题目大意:有n件T恤,每件T体恤都分别有价格(每件衣服的价格不重复).前面的颜色.背部的颜色三种 ...
- T-shirt buying CodeForces - 799B (小根堆+STL)
题目链接 思路: 由于题目说了只有1,2,3,三种色号的衣服,然后开三个对应色号的小根堆, 我是根据pair<int,int> 创建了一个以价格小的优先的优先队列. pair中的另外一个i ...
- Codeforces 1136D Nastya Is Buying Lunch (贪心)
题意: 给一个序列和一组交换序列(a,b),当且仅当a在b的前面(不允许有间隔),这两个数才能交换,问最后一个数最多能移动多少个位置. 分析: 这题是思路是十分的巧妙呀 , 用一个数组num[x] ...
- codeforces 349B Color the Fence 贪心,思维
1.codeforces 349B Color the Fence 2.链接:http://codeforces.com/problemset/problem/349/B 3.总结: 刷栅栏.1 ...
随机推荐
- mac 下mysql常用命令
是那种单独安装的mysql 启动: /usr/local/mysql/bin/mysql -u root -p
- SilverLight-DataConversion: 银光数据转换
ylbtech-SilverLight-DataConversion: 银光数据转换 1.A, Silverlight字符串格式表 1.B, 价格格式转换器 1.C, 日期时间格式转换器 1.D, 图 ...
- Map接口及其子类
Map接口操作的是一对对象,即二元偶对象,Map接口中的每一个元素都使用"key--value"的形式存储在集合中. SortedMap接口是排序接口,仅仅要是实现了此接口的子类, ...
- Asp 解析 XML并分页显示
Asp 解析 XML并分页显示 Asp 解析 XML并分页显示,演示样例源代码例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...
- jq:正则表达式
var checkNum = /^[A-Za-z0-9]+$/; 注意没有引号 checkNum.test(这里添加待匹配的字符串); var textNull=/^\s*$/; if(textN ...
- ubuntu16.04下Cmake学习一
根据网上的资料,我总结了一下,一个工程应该有根目录(bin)存放可执行文件,头文件目录(include)存放头文件,源码文件(src)存放你的算法,还需要一个库文件夹存放你编译的静态库或者动态库.然后 ...
- jdbc 链接池的优化
package cn.itcast.jdbc.datasourse; import java.sql.Connection;import java.sql.DriverManager;import j ...
- 使用Excel2007去反复功能时要注意的一个问题
作者:iamlaosong Excel2007有个去反复功能(菜单:数据----删除反复项).非常实用,过去须要用VBA编程实现的功能,如今点击一下图标即可了.去反复通常是指定某列或者某几列.依据这指 ...
- SERVICE_STATUS结构各成员解析
在编写Windows服务的时候,需要调用API函数::SetServiceStatus()向服务控制管理器(SCM)提交更新当前服务的状态信息,其第2个参数为指向SERVICE_STATUS结构的指针 ...
- struts2 eclipse集成jdk与tomcat (2)
Eclipse 中集成jdk与tomcat 1. 首次打开Eclipse为让你选择工作空间,选择合适即可. 添加JDK (1) 在Eclipse的菜单中选择window选项,单击 perference ...