1 条题解
-
0
题目大意
有一个 的沙滩,可以挖 的子矩阵。有 种贝壳,每种贝壳分布在若干位置。渡渡鸟会在某些格子下蛋。如果挖到蛋,则收益为 。每次询问:随机挖一个 子矩阵,收益严格大于 的概率。
算法思路
核心思想
二维差分 + 并查集维护被蛋破坏的区域 + 容斥原理。
关键步骤
- 贝壳覆盖统计
对每种贝壳的 个位置(),用容斥原理计算包含该种类所有贝壳的 子矩阵数量
使用二维差分数组快速标记覆盖情况
- 蛋的影响处理
每个蛋会破坏包含它的所有 子矩阵
用并查集维护每行中被蛋破坏的连续区间
快速查询未被破坏的子矩阵数量
- 概率计算
总子矩阵数:
对每个收益值 ,统计包含至少 种贝壳且无蛋的子矩阵数
概率 = 有效子矩阵数 / 总子矩阵数
算法流程
预处理贝壳覆盖
对每种贝壳的所有位置子集进行容斥
计算该子集对应的最小覆盖矩形
用二维差分标记覆盖情况
处理操作序列
下蛋操作:更新并查集,标记被破坏的子矩阵
查询操作:用树状数组统计满足收益要求的子矩阵数
输出答案
计算概率并输出,精度要求
复杂度分析
预处理:,容斥 + 二维前缀和
查询处理:,并查集 + 树状数组操作
空间复杂度:
总结
本题是组合计数 + 数据结构维护的复杂问题:
容斥原理:处理多种贝壳的覆盖统计
二维差分:高效标记矩形区域
并查集优化:维护被蛋破坏的区间,避免重复计算
概率计算:结合组合计数和实时更新
该解法通过巧妙的数据结构组合,在 的规模下高效处理动态查询,体现了解决复杂计数问题的综合能力。
- 1
信息
- ID
- 4715
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者