1 条题解
-
0
题解
问题分析
我们需要在每次成员数量变化后,判断是否存在一种方案,将成员分配到其可接受的冰鞋尺寸中,且:
- 每个成员分配到恰好一双冰鞋
- 每个冰鞋尺寸 最多使用 次
- 脚型为 的成员只能选择尺寸 的冰鞋
关键思路:Hall 定理
将问题建模为二分图匹配:
- 左部:所有成员(按脚型分组)
- 右部:冰鞋尺寸
- 边:脚型 的成员连接尺寸
根据 Hall 定理,存在完美匹配当且仅当:对于任意右部子集 ,其邻居集合的大小 。
在我们的问题中,右部的任意区间 的邻居是脚型满足 的所有成员。
条件转化
经过推导(具体过程略),Hall 条件等价于: 对于所有 ,有:
其中 表示脚型为 的成员数量。
解释:对于尺寸 ,能穿这个尺寸的成员来自脚型 (因为脚型 可接受 ,所以要 且 ,即 )。
算法步骤
- 维护数组 ,初始全 0
- 对于每个事件 :
- 更新
- 检查对于所有 (且 ),是否满足:
- 如果所有检查都通过,输出
TAK,否则输出NIE
数据结构优化
直接计算区间和会超时,使用 Fenwick 树 或 线段树:
- 维护前缀和数组
- 支持单点更新
- 支持区间和查询
- 每次事件后,只需要检查 这些位置的条件
复杂度分析
- 每次事件:更新 ,检查 个位置,每个检查
- 总复杂度:
注意:当 很大时可能超时,可以进一步优化:
- 维护每个位置 的当前区间和值
- 只维护全局最大值,利用单调性减少检查次数
- 最优实现可达
样例验证
对于样例:
- : count[1]=3,检查 都满足条件 →
TAK - : count[2]=3,检查 都满足条件 →
TAK - : count[3]=3,检查 ,发现 时 sum=3+3=6>4 →
NIE - : count[2]=2,检查 都满足条件 →
TAK
总结
本题核心是将冰鞋分配问题转化为二分图匹配,利用 Hall 定理得到简洁的判定条件,再通过数据结构高效维护动态更新。
- 1
信息
- ID
- 4740
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者