题目描述

虽然在小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. mysql 删除重复数据只保留一条记录

    删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...

  2. git push时提示--set-upstream

    问题: 提示需要加--set-upstream

  3. vue动态设置Iview的多个Input组件自动获取焦点

    1.html,通过ref=replyBox设置焦点元素,以便后续获取 // 动态设定自动获取焦点按钮 <p class="text-right text-blue fts14 ptb1 ...

  4. linux下创建svn仓库及用户

    1 Linux下创建svn仓库 1.1 启动SVN服务 svnserve -d -r  /SVNRootDirectry 其中SVNRootDirectry是你的SVN 根目录,例如192.85.1. ...

  5. C语言文件读写操作

    C语言实现文件读写,注意区分几个方法: 写入: fwrite() //个人认为这个最好,可是实现写入任何数据类型,任何长度 fputs() //写入一个字符串,字符串长度不能太长,具体的长度未知,但估 ...

  6. MySQL--15 MHA简介

    目录 一.MHA简介 二.工作流程 三.MHA架构图 四.MHA工具介绍 五.基于GTID的主从复制 六.部署MHA 一.MHA简介 松信嘉範: MySQL/Linux专家 2001年索尼公司入职 ...

  7. categorical_crossentropy VS. sparse_categorical_crossentropy

    From:https://jovianlin.io/cat-crossentropy-vs-sparse-cat-crossentropy/ categorical_crossentropy 和 sp ...

  8. hibernate配置注意事项

    1:多对一配置 private Set<DrawRecordModel> cjrecordsSet = new HashSet<DrawRecordModel>(); 正确 p ...

  9. 【串线篇】SQL映射文件-联合查询(完结association+cellection)

    1.级联属性的方式封装查出1-1 查钥匙的时候顺别把对应的级联的那把锁也查出来 1).两个JavaBean,Key里有对应的Lock(private Lock lock;//当前钥匙能开哪个锁:) 2 ...

  10. 太可怕了!黑客是如何攻击劫持安卓用户的DNS?

    最近发现的针对Android设备的广泛路由器的DNS劫持恶意软件现在已升级为针对iOS设备以及桌面用户的功能. 被称为RoamingMantis的恶意软件最初发现在上个月劫持了互联网路由器,以散布旨在 ...