建筑抢修 BZOJ 1029
建筑抢修
【问题描述】
小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏。现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间。同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑。如果某个建筑在一段时间之内没有完全修理完毕,这个建筑就报废了。你的任务是帮小刚合理的制订一个修理顺序,以抢修尽可能多的建筑。
【输入格式】
第一行是一个整数N接下来N行每行两个整数T1,T2描述一个建筑:修理这个建筑需要T1秒,如果在T2秒之内还没有修理完成,这个建筑就报废了。
【输出格式】
输出一个整数S,表示最多可以抢修S个建筑.
【样例输入】
4
100 200
200 1300
1000 1250
2000 3200
【样例输出】
3
N < 150,000,T1 < T2 < maxlongint
题解:
先按T2排序,按顺序枚举
贪心考虑,如果能在T2内维修好就加入左偏树(大根堆)
否则考虑与堆顶的关系
如果不维修堆顶而维修当前建筑使用时间更少,就将堆顶弹出加入当前建筑
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
inline int Get()
{
int x;
char c;
while((c = getchar()) < '' || c > '');
x = c - '';
while((c = getchar()) >= '' && c <= '') x = x * + c - '';
return x;
}
const int me = ;
struct building
{
int x, y;
}a[me];
int n, rt, num;
int dis[me], lc[me], rc[me];
inline bool rule(const building &a, const building &b)
{
if(a.y != b.y) return a.y < b.y;
return a.x < b.x;
}
int Marge(int x, int y)
{
if(!x) return y;
if(!y) return x;
if(a[x].x < a[y].x) swap(x, y);
rc[x] = Marge(rc[x], y);
if(dis[lc[x]] < dis[rc[x]]) swap(lc[x], rc[x]);
if(!rc[x]) dis[x] = ;
else dis[x] = dis[rc[x]] + ;
return x;
}
int main()
{
n = Get();
for(int i = ; i <= n; ++i)
{
a[i].x = Get();
a[i].y = Get();
}
sort(a + , a + + n, rule);
int ti = ;
for(int i = ; i <= n; ++i)
{
if(ti + a[i].x <= a[i].y)
{
rt = Marge(rt, i);
ti += a[i].x;
++num;
}
else
{
if(!rt) continue;
int c = ti - a[rt].x + a[i].x;
if(c <= a[i].y && a[i].x < a[rt].x)
{
int a = lc[rt], b = rc[rt];
rt = Marge(a, b);
rt = Marge(rt, i);
ti = c;
}
}
}
printf("%d", num);
}
建筑抢修 BZOJ 1029的更多相关文章
- AC日记——[JSOI2007]建筑抢修 bzoj 1029
1029 思路: 贪心,而且,stl水过: 然而神特么输出que.size()就错! 代码: #include <queue> #include <cstdio> #inclu ...
- 1029: [JSOI2007]建筑抢修 - BZOJ
Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修 ...
- BZOJ 1029 建筑抢修 贪心+堆
又搞了一晚上OI,编了两道BZOJ和几道NOI题库,临走之前写两篇感想 noip越来越近了,韩大和clove爷已经开始停课虐我们了... 1029: [JSOI2007]建筑抢修 Time Limit ...
- BZOJ 1029 建筑抢修(贪心堆)
原题代号:BZOJ 1029 原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029 原题描述: 建筑抢修 小刚在玩JSOI提供的一个称之为 ...
- BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...
- BZOJ 1029: [JSOI2007]建筑抢修 贪心
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落 ...
- BZOJ 1029 [JSOI2007] 建筑抢修(贪心)
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2285 Solved: 1004[Submit][Statu ...
- 【BZOJ】【1029】【JSOI2007】建筑抢修
贪心 按T2(完成时限)排序,然后从前往后依次枚举 如果sum+a[i].t1<=a[i].t2则加入 如果来不及修这个建筑: 如果当前这个建筑的维修时间t1比之前修过的建筑中耗时最长的耗时短, ...
- BZOJ 1029 建筑抢修
Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修 ...
随机推荐
- windows定时任务小注
static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static vo ...
- softmax_loss
softmax_loss中的ignore_label是来自于loss layer,而不是softmax_loss的参数
- What is the difference between try/except and assert?
assert only check if a condition is true or not and throw an exception. A try/except block can run a ...
- 前端vue 里的tab切换 减少dom操作
<div class="vuedemo"> <div class="all"> <div class="tabone&q ...
- luogu2312 解方程 (数论,hash)
luogu2312 解方程 (数论,hash) 第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了. 这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数 确实 ...
- [LUOGU] P1387 最大正方形
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...
- 【OS_Linux】Linux下软件的安装与卸载
1.Linux中软件安装包的分类 1) 一类是可执行的软件包,无需编译直接安装.在Windows中所有的软件包都是这种类型.安装完这个程序后,你就可以使用,但你看不到源程序.而且下载时要注意这个软件是 ...
- GIMP图像窗口的自定义
具体功能包含:初始缩放比例.空格键按下时触发动作
- Elasticsearchs的安装/laravel-scout和laravel-scout-elastic的安装
安装: https://github.com/medcl/elasticsearch-rtf 先下载包 下载解压后 cd elasticsearch-rtf-master ll bin/elastic ...
- spring,spring mvc,mybatis 常用注解
文章来源:https://www.cnblogs.com/hello-tl/p/9209063.html 0.在spring,soring mvc, mybistis 中的常用注解有一下 <! ...