最近复习了一下堆,于是去luogu上找一些简单题写一写

贪心的想,小z不会到一半以后回头去Ak,因为这样从时间上想肯定是不优的,他可以早在之间经过时就AK
所以我们可以将所有机房按照横坐标排序
可以想到的是,我们最后肯定是要走过所有的机房,也就是说路程消耗的疲劳值是不可避免的。
我们只能尽可能的减少小ZAK所花费的时间
贪心的考虑,当我们在机房Ak所花费的时间长时,我们可能能在这个时间内AK更多的机房
所以当时间出问题时,我们肯定要取出堆顶删除以便AK更多的机房。
我们维护一个关于机房AK时间的大根堆,每次先假定要Ak,然后将时间丢入堆中,所到当前机房所花费的时间比总时间大,则移除堆顶
但是需要注意的是,移除堆顶时,我们的答案并不需要减少,因为刚刚插入一个,然后超过了总时间,在移除一个,刚刚好抵消
至于为什么只需要移除堆顶:
我在题解上看到过用while循环去移除堆顶的,然而实际并不需要,因为我们刚刚插入一个新元素
对于这个元素来说,若他不是堆中最大元素,显然我们移除最大的肯定就把这个新元素占的地方给腾出来了
若是最大元素,那么直接删除就等于过而不入,对答案没有影响

这样我们就能AC这道题

嗯好吧,其实思路是有些问题的

因为是这样的,可能的是,我们在当前这个机房,即使过而不入,单单是走过去,在加上之前的选择并AK机房耗费的时间就把总时间给超了

这样我们不得不多次弹出堆顶,同时在弹出第一个堆顶后,剩下的弹出多少个,答案数就要减去多少

好在这题没有卡

不会且没看stl的我选择手写二叉堆

 #include<bits/stdc++.h>
#define ll long long
#define uint unsigned int
#define ull unsigned long long
using namespace std;
const int maxn = ;
struct shiki {
ll x, t;
}a[maxn];
ll heap[maxn << ], tot = , num = ;
ll n, m, top = ;
ll ans = ; inline ll read() {
ll x = , y = ;
char ch = getchar();
while(!isdigit(ch)) {
if(ch == '-') y = -;
ch = getchar();
}
while(isdigit(ch)) {
x = (x << ) + (x << ) + ch - '';
ch = getchar();
}
return x * y;
} inline void up(int p) {
while(p > ) {
if(heap[p] > heap[p / ]) {
swap(heap[p], heap[p / ]);
p /= ;
}
else break;
}
} inline void down(int p) {
int s = p * ;
while(s <= tot) {
if(s < tot && heap[s] < heap[s + ]) s++;
if(heap[p] < heap[s]) {
swap(heap[s], heap[p]);
p = s, s = p >> ;
}
else break;
}
} inline void extract() {
heap[] = heap[tot--];
down();
} inline void insert(ll k) {
heap[++tot] = k;
up(tot);
} inline bool cmp(shiki a, shiki b) {
return a.x < b.x;} inline int get_top(){return heap[];} int main() {
n = read(), m = read();
for(int i = ; i <= n; ++i) {
ll x = read(), t = read();
if(x <= m && t <= m) {
a[++top].x = x;
a[top].t = t;
}
}
sort(a + , a + top + , cmp);
for(int i = ; i <= top; ++i) {
insert(a[i].t);
num += (a[i].x - a[i - ].x) + a[i].t;
if(num <= m) ans++;
if(num > m) {
num -= get_top();
extract();
}
}
printf("%lld\n", ans);
return ;
}

luogu P2107 小Z的AK计划的更多相关文章

  1. Luogu P2107 小Z的AK计划 堆贪心

    好久不做这种题了... 存一下每个点的位置和时间,由于达到某个位置跟之前去哪里AK的无关,所以在时间超限后,可以用大根堆弹掉之前消耗时间最大的,来更新答案,相当于去掉之前花费最大的,直到时间不在超限. ...

  2. [洛谷P2107] 小Z的AK计划

    题目类型:贪心,堆 传送门:>Here< 题意:给出\(N\)个房间,每个房间距离起点的距离为\(x[i]\),每个房间可以选择进去和不进去,如果进去了那么要\(t[i]\)秒后才能出来. ...

  3. 【P2107】小Z的AK计划(优先队列+贪心)

    水一发优先队列的水题.. 这个题貌似以前有做过类似的.具体的方法是用大根堆辅助贪心算法得出正解.可以看出来,如果小Z走到了某个地方,那么他最远一定是到了这里,不可能有再走回来这种操作,因为很明显那样不 ...

  4. 洛谷P2107 【小Z的AK计划】

    #include<iostream> #include<queue> #include<algorithm> using namespace std; struct ...

  5. [Luogu]小Z的AK计划

    Description Luogu2107 Solution 一开始打了一个60分的暴力DP,结果一分都没得--本地调了好久才发现是没开long long. 由于我的DP方程没有任何性质,就是一个01 ...

  6. Luogu 1494 - 小Z的袜子 - [莫队算法模板题][分块]

    题目链接:https://www.luogu.org/problemnew/show/P1494 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天 ...

  7. 【题解】小X的AK计划

    题目描述 虽然在小X的家乡,有机房一条街,街上有很多机房.每个机房里都有一万个人在切题.小X刚刷完CodeChef,准备出来逛逛.机房一条街有n个机房,第i个机房的坐标为xi,小X的家坐标为0.小X在 ...

  8. [題解](貪心/堆)luogu_P2107小Z的AK計劃

    清明講過一道類似的,難度略大的:P3545 [POI2012]HUR-Warehouse Store 兩道題類似,都是暫時先把前面的加進候選集合里,如果超出限制的話就拿現在這個和前面的交換, 相當於不 ...

  9. [LUOGU] P2187 小Z的笔记

    看范围猜方程,应该是O(n)级别的 f[i]表示前i个合法的最小代价,转移需要枚举断点位置,O(n^2) f[i]表示前i个合法留下的最大个数,同时更新距离最近的26个字母的位置,O(n)转移 f[i ...

随机推荐

  1. CF821 E. Okabe and El Psy Kongroo 矩阵快速幂

    LINK 题意:给出$n$条平行于x轴的线段,终点$k$坐标$(k <= 10^{18})$,现在可以在线段之间进行移动,但不能超出两条线段的y坐标所夹范围,问到达终点有几种方案. 思路:刚开始 ...

  2. C#为何不推荐在构造函数中访问虚成员

    如果在一个类中定义了虚属性或者虚方法,又在构造函数中访问了这个虚属性或方法,此时VisualStudio是不会给出警告,并且编译也没有问题,但是如果安装了Resharper插件则会给出警告提示:&qu ...

  3. onblur & onchange

    本文地址:http://www.cnblogs.com/veinyin/p/7606914.html  两者均可用于验证是否输入数据 onblur : 表示不再是焦点,是 onfocus 的相反事件, ...

  4. [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)

    [洛谷P1029]最大公约数与最小公倍数问题 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P, ...

  5. NYOJ 1272 表达式求值 第九届省赛 (字符串处理)

    title: 表达式求值 第九届省赛 nyoj 1272 tags: [栈,数据结构] 题目链接 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表 ...

  6. TinyOS 代码分析

    1.Basestation案例   位于/opt/tinyos-main-master/apps/Basetation 1.1本例的顶层结构图: 1.2软件实现流程 1) uartIn,uartOut ...

  7. HMM的概述(五个基本元素、两个假设、三个解决的问题)

    一.五个基本元素 HMM是个五元组 λ =( S, O , π ,A,B) S:状态值集合,O:观察值集合,π:初始化概率,A:状态转移概率矩阵,B:给定状态下,观察值概率矩阵   二.两个假设 HM ...

  8. arch点击硬盘无法挂载

    出现问题如下 在使用xfce4桌面的时候在点击硬盘图标时可以挂载虽然要求你输入root密码 但是在使用openbox的时候点击硬盘图标却出现如下提示,权限的问题 Not authorized to p ...

  9. Ubuntu 17.10 用 apt 搭建 lamp 环境、安装 phpmyadmin、redis 服务+扩展、mysql 扩展、开启错误提示、配置虚拟主机

    2018-02-24 13:50:30 更新: 个人喜欢相对原生又不太麻烦,所以用 apt 构建环境.不过,最近使用到现在记得出现过了 3 次 apache 或 mysql 服务器无法启动或无法连接的 ...

  10. 003iptables 命令介绍

    http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables 防火墙可以用于创建过滤(filter)与NAT ...