AtCoder Grand Contest 001
D. Arrays and Palindrome
如果两个字符要求相同就给它们连边,对于一个长度为 x 的回文串,x 是偶数会连 x/2 条边,奇数会连 x/2−0.5 条边。
a 和 b 两个序列总和为 2n,要让 n 个字符相同至少连 n−1 条边,也就是奇数个数超过 2 时一定无解。
考虑如何构造,手玩应该会发现有一种左右横跳的构造,对于单个回文串,发现构造一个 x−1/x+1 的回文串就能把这个回文串串起来,+1/−1 可以用来拼接相邻两个回文串,这样能构造出 m=2 的情况:
m>2 可以考虑中间的串长度不变直接错位,这在偶数的情况下能达到同样的效果,但是奇数就不行了,所以直接把最多两个奇数放到序列的两端上。
E. BBQ Hard
去掉 i<j 的限制。
考虑格路计数,转换成求每对 (i,j),从 (−ai,−bi) 到 (aj,bj) 的方案数之和。
值域很小,O(V2) 递推就行了。
F. Wide Swap
显然从值域入手好做,因为,交换操作变成相邻的了。(即在逆排列 q 上考虑)
然后考虑相对顺序 i<j,如果 |qi−qj|<K,那么 qi 一定在 qj 前面,相当于建立了一个 DAG 的限制关系。
这个 DAG 只需要找到每个 qi 最大的 j<i 满足 |qi−qj|<K 且 qj>qi 就好了,因为 qj<qi 本身就会先决策,<j 的会和 j 串起来。
在 q 上怎么贪呢,如果没有限制,我们首先希望 qi=1 挪到越前面越好,然后是 qi=2。注意这并不等价于 DAG 字典序最小的拓扑序(但这这题的建图上是的),但是它等价于反图字典序最大的拓扑序(可以反证然后递归到子问题)。
用线段树建图,优先队列维护即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!