AT做题记录

发布时间 2023-11-12 19:36:11作者: 星影流灿

很喜欢atcoder上的题目,思维含量很高,而且明显感觉不像cf那样有点奇怪,风格更偏oi一点吧(再也不打cf了)。主要会记录蒟蒻做题时的一些想法,边做边写,想到什么就会写什么(这不是草稿纸嘛) 可能有点乱,但毕竟是真实思路变化。想不出来的会看了题解之后自己写一遍,并记录一下自己没想到的点(感觉很可能全都没想到)

[ARC155C] Even Sum Triplet

首先想到,3个数相加为偶数只有2种情况:2奇1偶或3个都是偶数。然后立马想到判无解的一种情况:若 \(A\) 中有元素个数和 \(B\) 不一样,直接输出 -1 。枚举一下可重排3个数的奇偶排列情况:110101011000 。emmm,我们可以发现什么捏?试着再考虑一下不可重排的三个数奇偶情况: 001010100111 。发现任意一个不可重排的2组,放在一起都可以产生一组能重排的排列。 如 001010101 就是可重排的。又想了一下,发现不管怎么对 000 进行排列都无法使得它周围的3个数变得可以重排。考虑极端情况,若一个序列全是奇数,则不可重排。若全是偶数,则任意排列。若在全是奇数的序列中加入一个偶数,那么,此时序列里偶数的位置随便跑,并且可以随便调整奇数的位置。此时是必然有解的。由此而推广,我们会发现若有2奇1偶的情况,那么奇数的位置可以全部调至左边并随便排列顺序,而且可以有一个偶数的位置随便排。之后就想不动了,打摆子了QAQ。题解:接着就是若有2个偶数,则这2个偶数无法交换相对位置,3个偶数就随便了。要是没有连续的3个数中有2个奇数,那么奇数会把序列分成几段,每一段中若是只有2个偶数就没法动,有3个以上偶数就可以随便在这段中动了。

感觉主要是自己不太敢想,对于复杂题目多多尝试分类讨论,其实当时对于后面的我多想想应该是可以独立想出来的。

决定自己搞一个严谨的证明,毕竟终究中间有点感性证明,不是很舒服。
以下将偶数称作 0 ,奇数称作 1

  1. 对于有2奇1偶的情况:
    1. 1 若是只有一个偶数:此时0可以随便移动,而且位于0两端的1可以互换位置,我们就可以先将所有1移到最左边,然后类似于冒泡排序就可以排列出 \(B\) 了。这便必然有解。
    2. 2 若是有两个偶数:我们可以知道,因为一次操作只能操作连续的3个数,所以若是两个数可以交换位置,当且仅当它们处于连续3个数内且符合重排条件。而若是连续3格内有2个0明显不能重排,因此这两个0的相对位置永远无法改变。所以我们首先需要判断2个0的相对位置,之后就同1.1的情况类似,可以随便排,只不过0的相对位置不能改变而已。
    3. 3 若是有3个偶数以上:我们可以把所有1先排到最左边,这样右边的0随便调整位置,再把0插入到对应位置即可。有解
  2. 对于没有2奇1偶的情况:
    很容易发现,所有的1都不能动,将整个序列由1分成几段,那么只有0的个数大于2的段才能排列中间的顺序,小于等于2的都无法改变位置。判断即可。

[ARC154C] Roller

首先考虑最简单的无解情况: \(b\) 中有数没有在 \(a\) 中出现过。然后捏?看题解 紧接着可以发现这是一个环形的形状。