Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training(贪心+二分+优先队列)
题目链接: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(贪心+二分+优先队列)相关推荐
- 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 ...
- 【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过的很多,去看提,发现和 ...
- 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 ...
- 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这个时候两 ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- 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, ...
- Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs
传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...
- Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...
最新文章
- 轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
- JMeter基础之——录制脚本
- OpenCV Viz转变
- Javascript基于对象三大特征
- 【python教程入门学习】python值得学吗,怎么自学?
- JS与Jquery的事件委托机制
- find -exec 批量使用方法
- java版欧朋浏览器_Opera欧朋浏览器_Opera欧朋浏览器下载[2020官方最新版]Opera欧朋浏览器安全下载_
极速下载...
- mariadb mysql 重建_(MariaDB/MySQL)之DML(2):数据更新、删除
- 安全培训教程之------利用IIS写权限漏洞
- 视频转换器怎样将QSV格式转换MP4视频
- GAMIT新版本10.71发布了
- Jetson Xavier NX使用Yolov5+DeepStream+TensorRT实现CSI摄像头的目标识别及采坑记录
- java深度学习车牌识别open-lpr
- 中国地方方言交流学习总群 QQ群208192582
- 【Web前端大作业实例网页代码】html+css新闻资讯网页带dw模板和登陆注册(9页)
- 当外面的容器的height使用百分比时,如何设置line-height可以使里面的文字垂直居中
- sklearn.metrics.roc_curve解析
- 初识Matlab以及Matlab一般性教程
- 小学二年级计算机课游戏,小学二年级适合玩的课堂游戏