[POI2005]SAM-Toy Cars 贪心+堆
[POI2005]SAM-Toy Cars
题目:Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到它们;为了让他的房间有足够的空间,在任何时刻地板上都不会有超过k 个玩具. Jasio 在地板上玩玩具. Jasio'的妈妈则在房间里陪他的儿子, 当Jasio 想玩地板上的其他玩具时,他会自己去拿,如果他想玩的玩具在架子上,他的妈妈则会帮他去拿,当她拿玩具的时候,顺便也会将一个地板上的玩具放上架子使得地板上有足够的空间. 他的妈妈很清楚自己的孩子所以他能够预料到Jasio 想玩些什么玩具. 所以她想尽量的使自己去架子上拿玩具的次数尽量的少,应该怎么安排放玩具的顺序呢?
思路:
显然,地板上玩具不到k个时可以直接加,当前在地板上的玩具下一次出现的时候越晚越应
该被换掉,用单调队列维护;
细节:
注意已经在地板上的物品是不用删的,没有影响,但是删掉的话会TLE;
代码
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=1e6+7;
const int inf=1<<30;
struct toy{
int x,nt;
toy(){};
toy(int X,int Y){
x=X;
nt=Y;
}
friend bool operator <(const toy &x,const toy &y){
return x.nt<y.nt;
}
}a[N],b[N];
int n,m,k,ans,cnt;
int vis[N],last[N];
priority_queue<toy> q;
int main(){
scanf("%d%d%d",&n,&k,&m);
for(int i=1;i<=m;i++){
int x;
scanf("%d",&x);
a[i].x=x;
a[last[x]].nt=i;
last[x]=i;
}
for(int i=1;i<=m;i++) if(a[i].nt==0) a[i].nt=inf;
// cout<<"\n";
for(int i=1;i<=m;i++){
if(vis[a[i].x]){
// cnt=0;
// while(q.top().x!=a[i].x){
// b[++cnt]=q.top();
// q.pop();
// }
// q.pop();
// cout<<"--->"<<a[i].x<<" "<<a[i].nt<<"\n";
q.push(toy(a[i].x,a[i].nt));
// k++;
// for(int j=1;j<=cnt;j++){
// q.push(b[j]);
// }
continue;
}
if(!k){
toy t=q.top();
q.pop();
k++;
vis[t.x]=0;
// cout<<"-->"<<t.x<<"\n";
}
// cout<<i<<" "<<a[i].x<<"\n";
q.push(toy(a[i].x,a[i].nt));
k--;
vis[a[i].x]=1;
ans++;
}
cout<<ans;
}
[POI2005]SAM-Toy Cars 贪心+堆的更多相关文章
- P3419 [POI2005]SAM-Toy Cars / SP688 SAM - Toy Cars
一道很妙的贪心题 题面 我们考虑当我们插入时会面临的两种情况 当地上的玩具,不满 \(k\) 个时,那我们直接放就可以了. 当满了 \(k\) 个的时候,我们就要从地上拿出一个来给当前的腾位置. 这就 ...
- bzoj1528 sam-Toy Cars(贪心,优先队列)
「BZOJ1528」[POI2005] sam – Toy Cars Description Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Ja ...
- 周赛-Toy Cars 分类: 比赛 2015-08-08 15:41 5人阅读 评论(0) 收藏
Toy Cars time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- 【贪心+堆】XMU 1584 小明的烦恼
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能 ...
- BZOJ_2151_种树_贪心+堆+链表
BZOJ_2151_种树_贪心+堆 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编 ...
- BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...
- BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆
BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是 ...
- 【bzoj4425】[Nwerc2015]Assigning Workstations分配工作站 贪心+堆
题目描述 佩内洛普是新建立的超级计算机的管理员中的一员. 她的工作是分配工作站给到这里来运行他们的计算研究任务的研究人员. 佩内洛普非常懒惰,不喜欢为到达的研究者们解锁机器. 她可以从在她的办公桌远程 ...
- Codeforces Round #303 (Div. 2) A. Toy Cars 水题
A. Toy Cars Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/545/problem ...
随机推荐
- playable
探索TimelinePlayableAPI,让Timeline为所欲为 https://blog.csdn.net/qq826364410/article/details/80534892 Playa ...
- Unity技巧集合
地址:http://blog.csdn.net/stalendp/article/details/17114135 这篇文章将收集unity的相关技巧,会不断地更新内容. 1)保存运行中的状态 uni ...
- RPC之总体架构
要完成一个高可用.高性能的RPC框架,需要对其架构的设计进行梳理,这里参考xxl-rpc框架,对整个项目进行梳理. 以上就是项目的整个构架,分为四个部分: 第一个是服务发布与引入,基于JDK动态代理以 ...
- OpenvSwitch系列之六 vlan隔离
局域网游戏代表:红色警戒 Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令 ...
- MongoDB基础总结
1.数据可基本操作 1. 创建数据库 use databaseName 选择一个数据库,如果数据库不存在就自动创建一个数据库 只有向数据库中插入数据时,数据库才会被真实创建出来,而当数据库中没有数据 ...
- python基础:用yagmail模块发邮件
一.yagmail模块安装 网上下载的yagmail模块安装以后,在使用过程中,如果附件有中文,会显示乱码. pip install yagmail-0.10.212-py2.py3-none-any ...
- pytest测试框架 -- setup和teardown等
一.用例运行级别 1.函数级别(setup.teardown 或 setup_function.teardown_function): 仅对处于同作用域的测试函数有效(该函数定义不在类中,则对非类中测 ...
- tsconfig.json无法写入webpack.config.js 因为它会覆盖输入文件。
这个错误是什么意思?为什么要写入这个文件?即使我将该文件从项目中排除,该错误仍然存在.我该如何纠正这一点? 我将webpack.config.js文件删除,问题仍然存在. 解决方法: 如果未指定e ...
- linux系统漏洞扫描工具lynis
lynis 是一款运行在 Unix/Linux 平台上的基于主机的.开源的安全审计软件.Lynis是针对Unix/Linux的安全检查工具,可以发现潜在的安全威胁.这个工具覆盖可疑文件监测.漏洞.恶意 ...
- Redis统计访问量方法
1.统计客户忘问量 2.查询某位ID客户是否登录 一亿用户,统计数据10M左右,比较省空间 set usercount 0 设置一个变量,用于记录客户访问量setbit usercount 2 0 ...