【构造】AGC001 Arrays and Palindrome

题目要求构造一个与给定序列a总和相等的序列b,使得两序列按长度分割后每部分都是回文。通过分析,当a序列中有3个及以上奇数时问题无解。对于序列构造,当长度m=1时,有简单解决方案;当m≠1时,将奇数放两端并遵循特定规则构建b。实际上,这个问题并不需要并查集,对数组操作的理解即可解决。
摘要由CSDN通过智能技术生成

题意:

给出一个长为M的序列a,其总和为N
先在需要构造出一个序列b,其总和也为N,且满足如下条件:

对于任意一个字符串,如果按照a分为M块,每块内部都为回文,
而且按照b分为M块,没亏内部也为回文。

要求所有满足上述条件的字符串,所有字符都相同。


分析:

其实这道题非常非常水。。。

由于最近刷了很多并查集的题,那么这里利用并查集来解释一下:
对于任意一个回文,我们可以看作连一些边:
这里写图片描述
所以所有联通的点其种类必须相同。

最终要求只有一种类型,也就意味着所有的线连成了一条。

这样一来,无解条件就很显然了,当a序列中有3个及以上的奇数,则一定无解。

证明非常简单,因为一旦有奇数,在其中间必然有一个单一的点,并且必然是最终的连线的一个端点,一条线只有2个端点,所以如果存在3个及以上单点,则一定无法用一条线连起来。

现在考虑如何构造,首先针对m=1的情况:
一种很好的构造方式是: b1=a11,b2=1 b 1 = a 1 − 1 , b 2 = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值