Processing math: 100%

AtCoder Grand Contest 001

D. Arrays and Palindrome

如果两个字符要求相同就给它们连边,对于一个长度为 x 的回文串,x 是偶数会连 x/2 条边,奇数会连 x/20.5 条边。

ab 两个序列总和为 2n,要让 n 个字符相同至少连 n1 条边,也就是奇数个数超过 2 时一定无解。

考虑如何构造,手玩应该会发现有一种左右横跳的构造,对于单个回文串,发现构造一个 x1/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,如果 |qiqj|<K,那么 qi 一定在 qj 前面,相当于建立了一个 DAG 的限制关系。

这个 DAG 只需要找到每个 qi 最大的 j<i 满足 |qiqj|<Kqj>qi 就好了,因为 qj<qi 本身就会先决策,<j 的会和 j 串起来。

q 上怎么贪呢,如果没有限制,我们首先希望 qi=1 挪到越前面越好,然后是 qi=2。注意这并不等价于 DAG 字典序最小的拓扑序(但这这题的建图上是的),但是它等价于反图字典序最大的拓扑序(可以反证然后递归到子问题)。

用线段树建图,优先队列维护即可。

作者:zlxFTH

出处:https://www.cnblogs.com/zlxFTH/p/18173520

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   zlxFTH  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示