题目描述
小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全 毁坏。
现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间。同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑。
如果某个建筑在一段时间之内没有完全修理完毕,这个建筑就报废了。你的任务是帮小刚合理的制订一个修理顺序,以抢修尽可能多的建筑。

输入描述:
第一行是一个整数N接下来N行每行两个整数T1,T2描述一个建筑:修理这个建筑需要T1秒,如果在T2秒之内还没有修理完成,这个建筑就报废了。

输出描述:
输出一个整数S,表示最多可以抢修S个建筑.
N < 150,000; T1 < T2 < maxlongint

题解
题意就是n个建筑需要修复,只能同时修一个建筑,每个建筑修复需要t1时间,且必须在t2时间前修完,否则此建筑报废 问最多能修好多少个建筑。初看题目,想到的可能是动规,但t的范围太大,无法定义状态。由于没有权值,所以我们肯定考虑选花时间小的建筑,于是我们把建筑按花的时间从小到大排序,能选就选,选了的我们让它在尽量靠后的时间修(一个经典贪心套路)。初始当前使用时间usetime=0,能修复建筑个数ans=0; 先按照截止时间从小到大排序,如果i能选(usetime+i.x&lt;=i.y)则选(usetime+=i.x,ans++),并把耗费时间加入到大根堆中,如果不能选(usetime+i.x&gt;i.y),则看堆顶元素与耗费时间的大小关系,判断能否减小当前时间。跟看电视那总题有点关系。代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define lowbit(x) x&(-x)typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;const int N = 2e5+5;
const ll mod = 1e9+7;
const int INF = 0x3f3f3f3f;
const double eps =1e-9;
const double PI=acos(-1.0);
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const int exdir[4][2]={1,1,1,-1,-1,1,-1,-1};ll qpow(ll x,ll y){ll ans=1,t=x;while(y>0){if(y&1)ans*=t,ans%=mod;t*=t,t%=mod;y>>=1;}return ans%mod;
}pii a[N];
bool cmp(pii x,pii y){return x.se<y.se;
}
void solve(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i].fi>>a[i].se;}sort(a+1,a+1+n,cmp);priority_queue<int>q;int now=0,ans=0;for(int i=1;i<=n;i++){if(now+a[i].fi<=a[i].se)ans++,q.push(a[i].fi),now+=a[i].fi;else {int k=q.top();if(k>a[i].fi){q.pop();q.push(a[i].fi);now-=(k-a[i].fi);}}}cout<<ans;
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);//int t;cin>>t;//while(t--)solve(),cout<<'\n';solve();return 0;
}

【每日一题】【[JSOI2007]建筑抢修】相关推荐

  1. BZOJ 1029: [JSOI2007]建筑抢修【贪心】

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MB Description 小刚在玩JSOI提供的一个称之为"建筑抢修&q ...

  2. bz 1029: [JSOI2007]建筑抢修

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MB Submit: 3104  Solved: 1392 [Submit][Sta ...

  3. 洛谷——P4053 [JSOI2007]建筑抢修

    P4053 [JSOI2007]建筑抢修 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个 ...

  4. BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心

    1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的 入侵者.但 ...

  5. 牛客 [JSOI2007]建筑抢修

    牛客 [JSOI2007]建筑抢修:传送门 题目描述 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地 ...

  6. P4053 [JSOI2007] 建筑抢修(反悔贪心)

    P4053 [JSOI2007] 建筑抢修https://www.luogu.com.cn/problem/P4053 #include <iostream> #include <c ...

  7. 牛客网 【每日一题】5月26日题目精讲 [JSOI2007]建筑抢修

    链接: 文章目录 题目描述 题意: 题解: 题目描述 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地 ...

  8. 刷题记录:牛客NC20154[JSOI2007]建筑抢修

    传送门:牛客 题目描述 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落 的入侵者.但是T部落的基地里已经有N个建筑设施受到了严 ...

  9. Bzoj1029 [JSOI2007]建筑抢修

    Time Limit: 4 Sec  Memory Limit: 162 MB Submit: 4452  Solved: 2006 Description 小刚在玩JSOI提供的一个称之为" ...

最新文章

  1. Linux 打包及压缩命令使用方法总结
  2. Centos7上openVP-密钥登陆
  3. java线程间通信管道_通过管道进行线程间通信
  4. C++基础之指向成员的指针
  5. 为什么我们做分布式要用 Redis ?
  6. outlook 单独安装_民强村排烟管道安装公司
  7. Java常用设计模式————享元模式
  8. PHP利用Mysql锁解决高并发
  9. virtual box中安装Mac OS后设置分辨率
  10. 延迟和带宽:时延简介、最后一英里、核心网带宽、网络边缘
  11. 关于sp_generate_inserts使用方法
  12. mahout0.7 示例运行纪实
  13. Raki的读paper小记:SUBSPACE REGULARIZERS FOR FEW-SHOT CLASS INCREMENTAL LEARNING
  14. 计算机操作系统--缺页中断与越界中断
  15. 中国联通开放号码标记一键查询与清除服务
  16. 计算功耗设备待机时间!
  17. 2018 ucla计算机排名,2018福布斯最具价值美国大学排名:加州UCLA位列榜首!
  18. win10下QT5.11.1静态编译(带MYSQL)
  19. linux 重启nginx命令
  20. Mysql主主同步(主从同步)

热门文章

  1. 《一个出身寒门的高考状元之死》
  2. 超级应用成为战略技术趋势,企业建设应该如何落地
  3. 12种食品狂吸走你的多余脂肪
  4. 去掉最高分和最低分来评价成绩,用java实现
  5. VC++ MFC 遍历注册表,获取网卡名称。(设备管理器中的名称)
  6. Uva 12627 Erratic Expansion
  7. mfc中文本文件和文件夹的复制移动
  8. vue3 setup中父组件通过Ref调用子组件的方法
  9. 用电力猫实现无线IPTV
  10. 645 - 2007通信协议报文解析