Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training 详解
Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training
D. Stressful Training
题目大意:
比赛开始每个同学都带了电脑,但没带充电器,已知有n个同学,每个同学电脑剩余电量为a[i],每秒耗电为b[i],比赛时长为k秒。教练买了个充电器,每秒钟可以给一个电脑冲x的电;求最小的x使全体同学完成比赛。ps:第一秒不耗电,最后一秒可以小于0,电量可以为0
大佬解答:
二分答案后发现可以O(nlogn)O(nlogn)判断,想办法卡卡常即可,时间复杂度O(nlognlogs)O(nlognlogs),其中s为答案的范围。
菜鸟思维:
计算x的最小值,可以很容易想到二分;
如何通过mid验证x是否成立呢?
大佬告诉我们可以在电脑电量低于0的时刻,加一,表示此刻到此刻以前电脑至少需要充电一次。维护cnt数组,cnt[i]的前缀和即表示i以前至少要充电n次,如果n>i则表示无法满足充电需求;
那么代码为
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
#pragma warning (disable:4996)
typedef long long LL;
LL a[210000], need[210000];
int b[210000], n, k, cnt[210000];
bool check(LL mid)
{for (int i = 0; i <= k; i++)cnt[i] = 0;int tot = k - 1;for (int i = 1; i <= n; i++){if (!b[i])continue;LL hadtime = a[i];while (hadtime < need[i]){ cnt[hadtime / b[i] + 1]++;hadtime += mid;if (!tot)return false;tot--;}}for (int i = 1; i <= k; i++){cnt[i] = cnt[i] + cnt[i - 1];if (cnt[i] > i)return false;}return true;
}
int main()
{scanf("%d%d", &n, &k);for (int i = 1; i <= n; i++)cin >> a[i];for (int i = 1; i <= n; i++){scanf("%d", &b[i]);need[i] = LL(k - 1)*b[i];}LL left, right, mid, ans = -1;left = 0; right = 2e12;while (left <= right){mid = (left + right) / 2;if (check(mid)){ans = mid;right = mid - 1;}elseleft = mid + 1;}cout << ans << '\n';}
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 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 思 ...
- Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学
传送门 文章目录 题意: 思路: 题意: 给你一个数组aia_iai,定义一个数组是好的当且仅当对于所有iii都有ai!=ia_i!=iai!=i.定义f(a)f(a)f(a)表示数组aaa中i& ...
最新文章
- 如何学习streamdecoder类_如何学习篇5:强化2种能力——2种学习模式之运动类:隐性学习...
- Linux文件系统:概览(思维导图)
- 京东11.11大促背后,那些系统架构经历了些什么
- 调试笔记--jlink 变量转实时波形小技巧
- 虚拟机屏幕界面自适应调整
- Matlab中解决出现的错误使用 svmtrain (line 234) Y must be a vector or a character array.问题
- docsify and awesome
- 我的WCF之旅(13):创建基于MSMQ的Responsive Service
- matlab中的qr函数
- 10.5 0819吉米牛逼
- 阿里云发布首个流式存储与播放解决方案
- Log4jx 2.9 后支持进程号输出
- 数据库中字段设计与NULL值操作
- [Micropython]TPYBoard开发板点亮心形8*8点阵
- 【Autosar RTM】
- oracle sqlplus客户端,sqlplus下载|oracle sqlplus windows 客户端工具 64位下载 - 3322软件站...
- 小白也能搞通UDP通信(88E1111 RGMII 接口)
- ipsec 加密流程(一):ipsec策略匹配
- 椭圆曲线算法和国密SM2算法介绍
- 国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核