Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training //二分
https://codeforces.com/contest/1132/problem/D
题题意是有n台笔记本,要同时使用k个时间,每个时间可以给一台电脑充电x电量,求最小的x使得n台笔记本可以度过k时间。
显然 x越大越好,如果有答案,一定在某个值刚好成立,线性问题,直接二分x。
首先想法是维护一个还能使用时间最小的电脑(a[i]/b[i])最小,然后模拟,贪心的给能存活时间最短的电脑优先充电。
坑的地方是,multiset不能过(直接卡到22组,预先sort卡到27组),
优先队列或线段树(维护最小值)可以过。 (???)
https://blog.csdn.net/ccsu_cat/article/details/88310531(线段树也几乎是卡死)
贴优先队列代码(小心数据范围可能有爆的地方)
复杂度(O(K*log(ans)*log(n))
#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct no{LL a;LL b;LL c;
}lap[200005];
bool operator<(const no &x,const no &y){return x.c>y.c;
}
int n,k;
bool check(LL mid){priority_queue<no> q;for(int i=1;i<=n;i++) q.push(lap[i]);for(LL i=1;i<k;i++){no cur=q.top();q.pop();cur.a=cur.a+mid;cur.c=cur.a/cur.b;q.push(cur);if(q.top().c<i) return 0;}return 1;
}
LL binary(){LL l=0,r=1e13;LL ans=LLONG_MAX;while(l<=r){LL mid=(l+r)/2;if(check(mid)){ans=mid;r=mid-1;} else l=mid+1;}return ans;
}
int main(){ios::sync_with_stdio(false);cin>>n>>k;for(int i=1;i<=n;i++) cin>>lap[i].a;for(int i=1;i<=n;i++) {cin>>lap[i].b; lap[i].c=lap[i].a/lap[i].b;}LL ans=binary();if(ans==LLONG_MAX) cout<<-1;else cout<< ans; return 0;
}
题解有一种复杂度(O(K*log(ans))的做法
用vector维护小于生命期小于k的电脑的编号。 v[i] 里面放 当前生命期为i天的 电脑编号,然后模拟一遍写check。
By RSHS, contest: Educational Codeforces Round 61 (Rated for Div. 2), problem: (D) Stressful Training, Accepted, ##include<bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn=2*1e5+5;
int n,k;
LL a[maxn],b[maxn];
vector<int> v[maxn];
bool check(LL mid){for(int i=0;i<=k;i++) v[i].clear();LL cnt[maxn];for(int i=1;i<=n;i++){LL x=a[i]/b[i];if(x>=k) continue;cnt[i]=a[i]%b[i];v[x].push_back(i);}int p=0;for(LL i=0;i<k;i++){while(v[p].size()==0&&p<k)p++;if(p==k) break;int u=v[p].back();v[p].pop_back();LL newa=p*b[u]+cnt[u]+mid;LL uu=newa/b[u];if(uu<k){v[uu].push_back(u);cnt[u]=newa%b[u];}if(v[i].size()!=0) return false;}return true;
}
LL binary(){LL l=0,r=1e15;LL ans=LLONG_MAX;while(l<=r){LL mid=(l+r)/2;if(check(mid)){ans=mid;r=mid-1;} else l=mid+1;}return ans;
}
int main(){ios::sync_with_stdio(false);cin>>n>>k;k--;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];LL ans=binary();if(ans==LLONG_MAX) cout<<-1;else cout<< ans; return 0;
}
优先队列(几乎卡死)
vector模拟优化
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 75 (Rated for Div. 2) D. Salary Changing 二分 + check
传送门 文章目录 题意: 思路: 题意: 思路: 直接算不好算,考虑二分这个中位数midmidmid. 考虑如何checkcheckcheck,这个分情况来就好了: (1)mid>a[i].r( ...
- 【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 思 ...
最新文章
- golang枚举类型 - iota用法拾遗
- 怎么在服务器中修改sql权限设置密码,SQL server数据库的权限设置
- Python 骚操作,微信远程控制电脑
- java输出日志_java代码中如何正确使用loggger日志输出
- as工程放到源码编译_「Do.016」AndroidStudio不用编译,阅读Android源码
- 如何使计算机用户具有管理权限,如何把电脑普通用户权限提升超级管理员账户...
- 2008中国IC十佳(七):深圳芯邦冲刺创业板
- 水果食用大全 -- 果品食疗 - 其他
- php mysql bootstart_PHP+MySQL+Bootstrap 美食主题博客项目
- CSS3选择器(全)
- Linux 的磁盘挂载 | 详解
- c++11之特性之std::function(书:深入应用c++11)
- 计算机模拟飞行,模拟飞行 DCS F-14B Tomcat雄猫 中文指南 3.22计算机地址面板
- DSA-数据签名算法(理论)
- 收藏!数学节为你推荐10本数学好书!
- 数据库的基本操作(一)
- Unity实现众多平台一键社会化分享(ShareSDK)
- Android基于G-Sensor的计步算法
- STM32单片机的抢答器设计
- 弘辽科技:如何用直通车扶正人群。
热门文章
- vulcan 编程_我如何在四天内使用Vulcan.js构建应用程序
- 基于WordPress搭建个人网站
- 娜璋荆棘(二)不忘曾经眼里的对方多美好,程序员的荆棘人生
- Android高级UI开发(九)之侧滑菜单 --抽屉
- 洛谷 4238 【模板】多项式求逆
- 计算机网络里的DHCP是什么,路由器设置中的dhcp是什么意思?
- 引用生产任务单下推进行生产领料,金蝶KIS旗舰版盘点机PDA进销存,车间生产领料防止出错,生产领料流程,根据BOM物料清单自动计算领料数量
- 科技企业的技术文化为什么难写?
- TeamViewer和远程桌面冲突的问题
- python3d动画效果_使用Matplotlib 3D实现三维波浪动画