做题记录 25.5.14
UOJ #670. 【UNR #5】获奖名单
令
考虑从中心向外构造
先考虑
则需要找到以下两种形式之一:
-
(ba)|(ab) -
(gf)(e\ast)\cdots (\ast d)(cb)(a)|(ab)(cd)\cdots(ef)(g)
取出这一部分后回文串左右剩余部分拼起来仍然为一般情况
若每个字符建立一个点,再额外建立一个虚点,对于长为
然后考虑一般情况
若总长为偶数,则要么为上述一般情况,要么在上述基础上增加一个自环
求出虚点所在连通块的欧拉回路(题目保证有解,因此一定存在欧拉回路),这个回路覆盖了一般情况的第二种形式,沿着回路移动一遍,把字符串交错放置到中点左右
剩余部分一定只含长为
若总长为奇数,则在一般情况的基础上需要增加一条虚点开始非虚点结束的路径(设路径为
找出起点,求出欧拉路,欧拉路第一条边放置在中心,之后左右交替放置(先左后右),最终同样剩余重边和自环,处理方式和偶数长度类似,但没有剩余
时间复杂度 unordered_map)
代码
参考
\purple\odot CF547D Mike and Fish
每个
问题转化为给一张无向图定向,使之每个点的出度入度只差不超过
度数为奇数的点数量为偶数,两两配对,一对中两个之间连额外边,则转化为定向使出度入度相同,求欧拉回路即可
时间复杂度
代码