题目描述

虽然在小X的家乡,有机房一条街,街上有很多机房。每个机房里都有一万个人在切题。小X刚刷完CodeChef,准备出来逛逛。机房一条街有n个机房,第i个机房的坐标为xi,小X的家坐标为0。小X在街上移动的速度为1,即从x1到x2所耗费的时间为|x1−x2|。

每个机房的学生数量不同,ACM题目水平也良莠不齐。小X到达第i个机房后,可以花 ti的时间想题,然后瞬间AK;当然,也可以过机房而不入。

小X现在只有m个单位时间,之后他就该赶着去打Codeforces了。现在他想知道自己最多能在多少个机房AK,希望你帮帮他。

输入格式

第一行包含两个整数n,m。

接下来n行,每行包含两个整数xi,ti。

输出格式

一行,包含一个整数,表示小X最多能AK的机房数量。

输入样例

2 10

1 100

5 5

输出样例

1

题解

我们可以按距离排序,然后从距离近的像距离远的枚举,每次尝试和前面的选取方案更换即可。

我们可以用堆来维护前面的方案,如果还有足够的剩余时间,则将当前机房放入方案里;否则,如果当前机房耗时比前面耗时最大的机房耗时少,则更换这两个机房。

具体参考下面的代码。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue> #define MAX_N (100000 + 5) using namespace std; struct Node
{
long long x;
int t;
friend inline bool operator < (Node a, Node b)
{
return a.x < b.x;
}
}; int n;
long long m;
Node a[MAX_N];
priority_queue <int> q;
int ans; int main()
{
scanf("%d%lld", &n, &m);
for(int i = ; i <= n; ++i)
{
scanf("%lld%d", &a[i].x, &a[i].t);
}
sort(a + , a + n + );
for(int i = ; i <= n; ++i)
{
m -= a[i].x - a[i - ].x;
while(m < && !q.empty())
{
m += q.top();
q.pop();
}
if(m < ) break;
if(m >= a[i].t)
{
m -= a[i].t;
q.push(a[i].t);
}
else if(!q.empty() && a[i].t < q.top())
{
m += q.top();
q.pop();
m -= a[i].t;
q.push(a[i].t);
}
ans = max(ans, (int)q.size());
}
printf("%d", ans);
return ;
}

参考程序

【题解】小X的AK计划的更多相关文章

  1. luogu P2107 小Z的AK计划

    最近复习了一下堆,于是去luogu上找一些简单题写一写 贪心的想,小z不会到一半以后回头去Ak,因为这样从时间上想肯定是不优的,他可以早在之间经过时就AK所以我们可以将所有机房按照横坐标排序可以想到的 ...

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

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

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

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

  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. [洛谷P2107] 小Z的AK计划

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

  7. 小明的存钱计划 南阳acm54

    小明的存钱计划 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 小明的零花钱一直都是自己管理.每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且总能做到实际花 ...

  8. 牛客-小a的旅行计划 + 数学推导

    小a的旅行计划 题意: 小a终于放假了,它想在假期中去一些地方游玩,现在有N个景点,编号为,同时小b也想出去游玩.由于一些特殊♂原因,他们的旅行计划必须满足一些条件 首先,他们可以从这N个景点中任意选 ...

  9. 牛客ACM赛 B [小a的旅行计划 ]

    链接 B 小a的旅行计划 把\(n\)个数中选任意数分成\(a,b\)两个集合,集合无区别,要求不包含且有交,求方案数.\(n\leq 10^{13}\) 首先讨论\(a,b\)并集是否为全集: 若是 ...

随机推荐

  1. JavaScript 正则表达式中的特殊字符

    正则表达式中的特殊字符 字符 含义 \ 依照下列规则匹配: 在非特殊字符之前的反斜杠表示下一个字符是特殊字符,不能按照字面理解.例如,前面没有 "\" 的 "b" ...

  2. 在css里如何控制表单中文本的value内的文字的位置,比方说让它向右移动2px

    方法1:比较简单的方法是将文本放到一个容器中(div,span,a等等)然后给容器设置样式,通过控制容器的位置来达到控制字体位置.(margin-left:10px; margin-top:15px; ...

  3. RabbitMQ ——消息属性Properties

    简介 发送消息可以为消息指定一些参数 Delivery mode: 是否持久化,1 - Non-persistent,2 - Persistent Headers:Headers can have a ...

  4. swiper轮播图设置每组显示的个数及自定义slide宽度

    一.html演示代码: <div class="swiper-container"> <div class="swiper-wrapper"& ...

  5. 2018-8-10-C#-TextBlock-上标

    title author date CreateTime categories C# TextBlock 上标 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 ...

  6. ViewMode

    一.ViewMode 实现使用场景-Model枚举的情景下, 注意:枚举声明在后台的时候,需要渲染界面,页面表格使用 Bootstrap Table插件-事先通过ajax 渲染(数据库读取值1.2.3 ...

  7. Ubuntu 服务器Webmin错误的解决

    一:This web server is running in SSL mode. Try the URL https://***********:10000/ instead. 解决方案: 1.ss ...

  8. phpstrom 安装

    环境: ubuntu18.4 一. 安装 1. 下载安装包.tar.gz 下载地址:https://www.jetbrains.com/phpstorm/download/#section=linux ...

  9. word里输入英文字母间距变宽,字体改变,怎么回事?

    word里输入英文字母间距变宽,字体改变,怎么回事? 你有没有遇到下面这种情况,在word里输入英文,变的很奇怪,就像下面图中那样: 是不是很蛋疼?看起来很别扭. 那是因为输入法是全角状态 我们只要把 ...

  10. 安装RabbitMQ服务器及基本配置

    RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...