题目
题意给定n个工人,m个任务。每个任务有唯一的最适合的工人id。如果一个任务交给最适合的工人做,需要1小时,交给其他工人需要2小时。问让这n个工人同时去一起完成这m个任务,最少需要多少小时。
思路二分,找出最小需要多少小时。 怎么判断这n个工人,在num时间内能否完成这m个任务呢? 我们把这n个工人,按照手头最适配的任务数大小排序(排序是必须的)。 然后对于手头任务超出num的,我们累计起来这些处理不完的任务数。 对于手头任务没超出num的,则去帮忙处理之前没处理完的任务。
详见代码
代码#include
using namespace std;
#define ll long long
const int maxn = 200010;
int n, m, x;
int a[maxn];
bool check(int num) {
int res = 0;
for (int i = n; i >= 1; --i) {
if (a[i] > num) {
res += a[i] - num;
} else {
res -= (num - a[i]) / 2;
res = max(res, 0);
}
}
return res == 0;
}
void solve() {
scanf("%d%d", &n, &m);
for (int i = 1; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?