A
设 表示考虑前 行,选出的矩形在第 行上形成 中的区间的方案数,
每行的 只有 种,总复杂度 。
B
考虑先修改再查询怎么做。
考虑左下角为 ,右上角为 的矩形,发现斜率在 内的向量会穿过它,
考虑扫描斜率,扫到 时加入这个矩形,扫到 时删除它,则扫到一个向量的斜率时已经加入了所有其能穿过的矩形。
考虑一个向量 能穿过的、左下角在 的矩形,则这个向量需要延伸 倍才能碰到它,
要求向量碰到的第一个矩形,即要求向量能穿过的、 最小的矩形。
考虑分讨掉这个 。对于 的矩形,只需求 的最小值,也就只需求 的最小值,
对于 的矩形,只需求 的最小值,也就只需求 的最小值。
以 为下标对加入的所有矩形建权值线段树,维护区间 最小值即可。
然后这个题不是先修改再查询,套个 CDQ 变成先修改再查询即可。
C
选到每个鸽笼的概率会随着鸽笼的填满而变化,这个不太好处理,所以先用拒绝采样转化下题意:
每次可以选任意一个鸽笼,这个鸽笼满了就再选一个。记下每次选择的鸽笼作为操作序列。
考虑对 算答案。考虑容斥,把答案看成恰好 个鸽笼比 更晚填满的概率,
设 表示钦定 中鸽笼比 更晚填满的概率,则答案为 。
钦定 中鸽笼比 更晚填满,实际上就是操作序列上 中每个数都在 的最后一次出现后出现过,
也就是 , 在 的最后一次出现前出现小于 次。
考虑只留操作序列中, 的最后一次出现前的 以及 中的数,求满足条件的方案数除以总方案数。
比较特殊,必须出现 次,所以我们先不填 。
设 表示当前在操作序列中填入 个数的方案数,每次对于一个 考虑填入 个 ,则有转移 ,
填完长度为 的操作序列后,有 种填 的方案(因为 的最后一次出现一定在最后),
所以在操作序列中填入 个数的满足条件的方案数为 。
而如果不需要满足条件,每个数都可以随便填,所以在操作序列中填入 个数的总方案数为 ,
所以 。( 不会很大,最多只有 )
考虑同时计算大小相同的 的 值。设 表示除 外填入了 种数(即 ),且填入了 个数的方案数,
则有转移 。
则答案为 。
发现这个转移是背包的形式,所以一开始可以先把所有物品装进背包,求 的答案时把 拿出来。复杂度 。
D
最大值最小,考虑二分答案 。
两个人至少有一个停在点上的那档部分分,直接设 表示可不可能一个人在 ,一个人在 ,BFS 转移即可。
但是他们可能停在边上。所以在每条边上加一个点,一个人在这个点上就代表他停在这条边上,然后就同上了。
转移时需要算点线距和线线距,合理利用点乘叉乘即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具