题目链接:http://codeforces.com/contest/1132/problem/D

题目大意

每个同学电脑有初始电量和电量消耗速度,
这堂课有k分钟,其损耗过程有note描述。
现在有个输出x,每分钟可以指定一个电脑并充电x,
问要维护每位同学电脑电量始终不小于零,其最小的x是多少。

题目分析

这道题思路倒是蛮容易想的,就是细节比较多!
可以看出是二分,并且二分上界是12次方,题目凑好的,
不然过程中可能会有越界。
我们用优先队列维护过程中的电脑电量,
我们肯定优先选择支撑分钟最少的电脑,
如果电脑支撑分钟一样则无需细分,不难发现:
如果因为这次充电次数增加,那么下一次会轮到下一个最少的,
如果情况本身会超出界限,那么最终结果不会因为其顺序而影响,
关于这一点稍微模拟下不难发现。
那么对于每次取出来的节点,判定是否符合要求,如果符合则充电并再丢进去。
这里时间常数比较大,因为优先队列本身自带log,
下面是几个剪枝点:
上界可以预处理出来,这里我并没有这样做。。。
如果取出的最少次数都大于k那么一定可以成功(第二个if)
六十四位除法,关于次数的比较我们不要在优先队列的优先级比较里面写除法
而通过增加变量的方式来代替(重点:看来计组还是要好好学的。。。)
时间复杂度:O(nlog(1e12)*logn)

#include<bits/stdc++.h>
using namespace std;#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=2e5+5;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
/*
题目大意:
每个同学电脑有初始电量和电量消耗速度,
这堂课有k分钟,其损耗过程有note描述。
现在有个输出x,每分钟可以指定一个电脑并充电x,
问要维护每位同学电脑电量始终不小于零,其最小的x是多少。题目分析:
这道题思路倒是蛮容易想的,就是细节比较多!
可以看出是二分,并且二分上界是12次方,题目凑好的,
不然过程中可能会有越界。
我们用优先队列维护过程中的电脑电量,
我们肯定优先选择支撑分钟最少的电脑,
如果电脑支撑分钟一样则无需细分,不难发现:
如果因为这次充电次数增加,那么下一次会轮到下一个最少的,
如果情况本身会超出界限,那么最终结果不会因为其顺序而影响,
关于这一点稍微模拟下不难发现。
那么对于每次取出来的节点,判定是否符合要求,如果符合则充电并再丢进去。
这里时间常数比较大,因为优先队列本身自带log,
下面是几个剪枝点:
上界可以预处理出来,这里我并没有这样做。。。
如果取出的最少次数都大于k那么一定可以成功(第二个if)
六十四位除法,关于次数的比较我们不要在优先队列的优先级比较里面写除法
而通过增加变量的方式来代替(重点:看来计组还是要好好学的。。。)
时间复杂度:O(nlog(1e12)*logn)
*/
ll n,k;
ll a[maxn],b[maxn];
struct node{ll x,y,tim;bool operator<(const node& q) const {return tim>q.tim;///剪枝}
};
bool judge(ll x){priority_queue<node> pq;rep(i,1,n+1) pq.push(node{a[i],b[i],a[i]/b[i]});for(ll i=0;i<k;i++){node tp=pq.top();pq.pop();if(tp.x-i*tp.y<0) return false;if(tp.x/tp.y>k) return true;///剪枝tp.x+=x;pq.push(node{tp.x,tp.y,tp.x/tp.y});}return true;
}
int main(){scanf("%lld%lld",&n,&k);rep(i,1,n+1) scanf("%lld",&a[i]);rep(i,1,n+1) scanf("%lld",&b[i]);ll l=0,r=2e12;///这里还有一个加速点,可以预判定其上界while(l<r){ll mid=l+r>>1;if(judge(mid)) r=mid;else l=mid+1;}if(r==2e12) puts("-1");else printf("%lld\n",r);return 0;
}

Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training(贪心+二分+优先队列)相关推荐

  1. Educational Codeforces Round 61 (Rated for Div. 2)(A、B、C、D、E、F)

    欢迎访问本菜鸡的独立博客:Codecho 比赛名称 Educational Codeforces Round 61 (Rated for Div. 2) 比赛链接 https://codeforces ...

  2. 【Educational Codeforces Round 61 (Rated for Div. 2)】A.B.C.D.E.F.G

    前言 这场在最开始很顺利,A题6min1A,B题14min1A,但是由于C题过题人数太少一度认为这个C题很难,等有人过了才开始写最开始的想法,C题40min1A,过C之后发现F过的很多,去看提,发现和 ...

  3. Educational Codeforces Round 118 (Rated for Div. 2) C. Poisoned Dagger(二分或搜索)

    C. Poisoned Dagger 题意: Monocarp is playing yet another computer game. In this game, his character ha ...

  4. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  5. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  6. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  7. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  8. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  9. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  10. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

最新文章

  1. 轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
  2. JMeter基础之——录制脚本
  3. OpenCV Viz转变
  4. Javascript基于对象三大特征
  5. 【python教程入门学习】python值得学吗,怎么自学?
  6. JS与Jquery的事件委托机制
  7. find -exec 批量使用方法
  8. java版欧朋浏览器_Opera欧朋浏览器_Opera欧朋浏览器下载[2020官方最新版]Opera欧朋浏览器安全下载_ 极速下载...
  9. mariadb mysql 重建_(MariaDB/MySQL)之DML(2):数据更新、删除
  10. 安全培训教程之------利用IIS写权限漏洞
  11. 视频转换器怎样将QSV格式转换MP4视频
  12. GAMIT新版本10.71发布了
  13. Jetson Xavier NX使用Yolov5+DeepStream+TensorRT实现CSI摄像头的目标识别及采坑记录
  14. java深度学习车牌识别open-lpr
  15. 中国地方方言交流学习总群 QQ群208192582
  16. 【Web前端大作业实例网页代码】html+css新闻资讯网页带dw模板和登陆注册(9页)
  17. 当外面的容器的height使用百分比时,如何设置line-height可以使里面的文字垂直居中
  18. sklearn.metrics.roc_curve解析
  19. 初识Matlab以及Matlab一般性教程
  20. 小学二年级计算机课游戏,小学二年级适合玩的课堂游戏

热门文章

  1. 【摘抄】领导力21法则-约翰·C·马克斯韦尔
  2. Vim的插件管理利器pathogen
  3. day18Excise1
  4. 零基础Matlab Note9--离散数据绘图set(gca, )
  5. 战略、战术(和 OKR)
  6. .net性能最高的EF分页写法
  7. 高等数学笔记-苏德矿-第十章-曲线积分和曲面积分-第七节-高斯公式与斯托克斯公式
  8. 小草 李白 《菩萨蛮》
  9. php源码加密 zend_zend_guard对PHP代码进行加密教程
  10. PHP的zend引擎