题目
题意给定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
关注
打赏
热门博文