您当前的位置: 首页 > 

对方正在debug

暂无认证

  • 4浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C. Schedule Management(二分/贪心)

对方正在debug 发布时间:2022-07-13 07:50:28 ,浏览量:4

题目

题意

给定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             
关注
打赏
1664895754
查看更多评论
0.0356s