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 //二分相关推荐

  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 75 (Rated for Div. 2) D. Salary Changing 二分 + check

    传送门 文章目录 题意: 思路: 题意: 思路: 直接算不好算,考虑二分这个中位数midmidmid. 考虑如何checkcheckcheck,这个分情况来就好了: (1)mid>a[i].r( ...

  3. 【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过的很多,去看提,发现和 ...

  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. golang枚举类型 - iota用法拾遗
  2. 怎么在服务器中修改sql权限设置密码,SQL server数据库的权限设置
  3. Python 骚操作,微信远程控制电脑
  4. java输出日志_java代码中如何正确使用loggger日志输出
  5. as工程放到源码编译_「Do.016」AndroidStudio不用编译,阅读Android源码
  6. 如何使计算机用户具有管理权限,如何把电脑普通用户权限提升超级管理员账户...
  7. 2008中国IC十佳(七):深圳芯邦冲刺创业板
  8. 水果食用大全 -- 果品食疗 - 其他
  9. php mysql bootstart_PHP+MySQL+Bootstrap 美食主题博客项目
  10. CSS3选择器(全)
  11. Linux 的磁盘挂载 | 详解
  12. c++11之特性之std::function(书:深入应用c++11)
  13. 计算机模拟飞行,模拟飞行 DCS F-14B Tomcat雄猫 中文指南 3.22计算机地址面板
  14. DSA-数据签名算法(理论)
  15. 收藏!数学节为你推荐10本数学好书!
  16. 数据库的基本操作(一)
  17. Unity实现众多平台一键社会化分享(ShareSDK)
  18. Android基于G-Sensor的计步算法
  19. STM32单片机的抢答器设计
  20. 弘辽科技:如何用直通车扶正人群。

热门文章

  1. vulcan 编程_我如何在四天内使用Vulcan.js构建应用程序
  2. 基于WordPress搭建个人网站
  3. 娜璋荆棘(二)不忘曾经眼里的对方多美好,程序员的荆棘人生
  4. Android高级UI开发(九)之侧滑菜单 --抽屉
  5. 洛谷 4238 【模板】多项式求逆
  6. 计算机网络里的DHCP是什么,路由器设置中的dhcp是什么意思?
  7. 引用生产任务单下推进行生产领料,金蝶KIS旗舰版盘点机PDA进销存,车间生产领料防止出错,生产领料流程,根据BOM物料清单自动计算领料数量
  8. 科技企业的技术文化为什么难写?
  9. TeamViewer和远程桌面冲突的问题
  10. python3d动画效果_使用Matplotlib 3D实现三维波浪动画