CF1920
SC 真的在认真写喵,关注 Sugar_Cube 喵。()
A 没价值,略去。
B
给定一个可重集合,A 选择至多 k 个数删除,然后 B 在剩下的数选至多 x 个取相反数。
A 想要和尽量大,B 想要和尽量小,求两者都使用最佳决策的情况下的结果。
假如确定了删除哪些数,B 肯定是尽量取反大数,故答案是剩下的和减去 2 倍的前 x 大之和。
而 A 如果删不是前 x 大的数,对 B 没有影响,只能删是前 x 大的数,那么贪心地删最大的那个数。
注意到,删了可能不优,所以我们枚举 A 删了多少个数,找最大值即可。
C
给定一个长为 n 的数字串,对于 n 的每个正因子 k,把该串分为
称当前的这个划分是合法的,当且仅当存在
求合法划分数。
以为是分析性质,没想到直接暴力做就可以了。
考虑枚举所有
若
由于辗转相除的性质,直接写 gcd 复杂度就是对的。
代码
D
通过 n 步操作生成一个序列,初始序列为空:
向序列末尾插入
将序列整体复制
之后有若干次对该序列某个位置的值的询问,保证询问位置合法。
注意到两种操作都是插入,故一次询问只与一个前缀的操作有关。
我们二分出生成询问位置时的那次操作,如果是单点插入那么已经做完了。
否则我们可以把询问位置对于该操作前的序列长度取模,那么只需解决该子问题。
发现这样询问位置至少减少一半,所以复杂度是对的。
E
称一个 01 串合法当且仅当其恰好包含一个 1。
要求对满足恰好有 n 个合法子串,且最长合法子串
下次优化前记得先把转移式写出来。
对于一个 1 来说,设它左右的 0 的个数分别为
故我们对 01 串和 0 段序列构造双射,问题变为:
对于非空序列
直接考虑背包,朴素的状态设计为
注意到转移式与
再考察转移范围得到:
枚举
代码
F
Luogu
给定一个网格,格子有海水,火山和岛屿。
保证岛屿构成一个四连通块,所有火山和海水构成一个四连通块。
有若干次询问,每次询问对于一个点
要求最大化路径上任意一个位置到最近的火山曼哈顿距离的最小值。
Easy Version:
Hard Version:
思路解析
使用思维树,抓住关键的地方进行思考。
充要条件转化,大胆猜想。
使用思维上的近似转化为已知问题。
好好读题()
Easy Version
抛弃曼哈顿距离的性质,通过一次多源 bfs 求出所有非岛格子到最近的火山的距离,作为其权值。
二分,只保留那些权值足够大的格子,考虑怎么判是否存在绕岛一周的路径。
每个岛屿方块的四个方向上都存在一个路径格子?
看起来非常没有前途。
考虑正难则反,考虑什么时候无解,发现此时必然存在路径经过那些不合法点且能从边界连到岛上。
不合法点指要么权值小,要么无法从起点到达,连接显然是八连通。
Hard Version
感觉关键点仍在判环岛上,但是上面的判断方法看起来没有一个非过程化的转化前途。
考虑回退思路到二分前。
考虑原图实际上与一个环拓扑同构,上面的判断方法可以理解为不存在一个环上的点不可选。
那我们考虑 破环成链,在原问题上对应着考虑任意找一条岛屿格子边界到网格边界的简单路径,称其为分割线。
Conclusion:如果任意找一条分割线,则任意简单回路绕岛一周,当且仅当它经过该分割线恰好奇数次。
Prove:
必要性画图显然,充分性注意到环分割后是一条链,那么把经过分割线奇数次的部分拿出来,剩余部分只能是一条链,所以合法。(感觉不如直接画个图发现没有反例)
值得注意的是,所有经过分割线偶数次的路径一定不是简单回路,手玩一下容易证明。
那么我们任选一条分割线,直接考虑拆点,每个点拆为经过奇数次和经过偶数次。
我们的询问就是
于是直接 Kruskal 重构树即可通过 Hard Version,在线单
此外,该问题也可以通过离线整体二分和启发式合并解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?