要解决这个问题,我们需要根据分组规则,优先优化老员工(1)和新员工(0)的组合方式,以最小化分组数。
核心规则回顾
- 每组最多3人;
- 每组最多1个老员工;
- 若组内有1个老员工,该组最多2人。
解题思路
- 统计老员工(cnt_1)和新员工(cnt_0)的数量;
- 处理老员工的分组:每个老员工需要单独占用1个组(且该组最多再搭配1个新员工,因为“有老员工的组最多2人”);
- 处理剩余新员工的分组:剩余新员工按“每组最多3人”分组。
具体步骤
- 每个老员工至少占1个组,且每个老员工的组可以搭配0~1个新员工(优先搭配1个新员工,以减少新员工的分组数)。
- 老员工消耗的新员工数为
min(cnt_0, cnt_1),剩余新员工数为cnt_0 - min(cnt_0, cnt_1)。 - 老员工的分组数为
cnt_1(每个老员工至少1组)。 - 剩余新员工的分组数为
ceil(剩余新员工数 / 3)(向上取整,因为每组最多3个新员工)。
代码实现(Python)
staff = list(map(int, input().strip().strip('[]').split(',')))
cnt_1 = staff.count(1)
cnt_0 = staff.count(0)
# 老员工的组最多搭配1个新员工,消耗min(cnt_0, cnt_1)个新员工
used_0 = min(cnt_0, cnt_1)
remaining_0 = cnt_0 - used_0
# 老员工的分组数是cnt_1,剩余新员工按每组3个分组(向上取整)
group_1 = cnt_1
group_0 = (remaining_0 + 2) // 3 # 向上取整的技巧:(x + 2) // 3
# 向上取整也可以使用math库:group_0 = math.ceil(remaining_0/3)
total = group_1 + group_0
print(total)



京公网安备 11010502036488号