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 ...
随机推荐
- DEDECMS图片集上传图片出错302的解决办法
无忧主机(www.51php.com)小编今天在调试dede网站的时候发现了一个问题,因为小编想在网站上增加一个图片集的栏目,于是就到后台图片集栏目去添加内容,谁知在上传图片的时候给我弹出个错误信息框 ...
- jmeter3.x的jtx文件解析
jtl保存测试结果 打开jtl文件,内容为下: timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,suc ...
- 解决Ubuntu下gedit中文乱码的情况
windows下简体中文多用GBK编码 (或GB2312, GB18030), 而linux下多用UTF-8编码. 因此,一般来说在微软平台编辑的中文txt不能在ubuntu下直接打开查看,除非在保存 ...
- 《转》 在C++中使用TinyXML2解析xml
读取和设置xml配置文件是最经常使用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,由于它的API接口和Java的十分类似.面向对象性非常好. TinyX ...
- 【AngularJS】Yeoman安装
看不到PPT的请自行解决DNS污染问题.
- 又一次认识java(九) ---- 内部类
注意注意!! ! 前排提示!!.本篇文章过长,最好收藏下来慢慢看.假设你之前对内部类不是非常熟悉,一次性看完,大概你会懵逼. . . 1. 内部类概述 一个类的定义放在还有一个类的内部,这个类就叫做内 ...
- 【Python】matplotlib绘制折线图
一.绘制简单的折线图 import matplotlib.pyplot as plt squares=[1,4,9,16,25] plt.plot(squares) plt.show() 我们首先导入 ...
- ORACLE经常使用系统查询
1 查询系统全部对象 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS FRO ...
- ip获取位置
$ip = $_SERVER["REMOTE_ADDR"]; $url = "http://ip.taobao.com/service/getIpInfo.php?ip= ...
- 查看并修改Linux主机名命令hostname
查看主机名 hostname可以查看主机名 export也可以查看 修改主机名 echo new-hostname > /proc/sys/kernel/hostname (系统启动时,从此文件 ...