CF1491G Switch and Flip
这题给我的第一观感要优于题目I
这题的母题显然是1~n个硬币,通过swap变为有序。
只不过多了一个正反面的属性。
正反面的翻转本身也往往与奇偶性联系起来。
因此每个数字被翻转的次数就自然地进入了我的视野。
它们都得是偶数。
而一次翻转操作会涉及两个数字,我现在有单独考虑一个数字的被操作次数的倾向,那么能否把一个操作给拆成两个半操作?
在这个方向上暂无头绪,先退回来,再退一次,退到它的母题swap上。
不由得让人想起把一个数列用最小swap次数变为有序的题目,它的做法是贪心。
从虚空中飘出的一块碎片:从左到右一位位调整正确。
现在我把局面设定为第一位不在正确位置上,那么我把其正确的位置握在右手。
对它们两个执行操作,然后——咦,刚想说第一位已经归位,因此就不需要在后续打扰它了,却与另一个观察相碰撞:我们把第一位翻到了反面,因此不能保留这样的第一位的状态到终点。
我该怎么解读这个惊奇呢?闪烁出的想法是,我们再用一次操作,把反面翻转回来,另外一边的数字也选一个相同情况的数字,这样直觉上会超过次数限制,但好像是可以swap成正确序列的。
我们可以根据用途来分两阶段操作,第一阶段是数值调整正确,第二阶段是面调整正确。
如果第一阶段结束后,所有的数字都是反面,那么只要n是偶数,就可以全调整成正面。
把文字堆砌上去,终会搭成胜利的天梯。
添加什么条件可以让我更游刃有余。
什么都想不出来。
脑中的棋盘化为空气,里面含有什么我能看见的东西吗?
没有爱就看不见。突然想起了海猫的名句。
我们的突破口可能在哪里?所有的配对地位相同吗?
不同的话,我想有两种不同,数值关系,位置关系。
关系是配对中两个数字的关系,也可能是其中一个数字与数列中它的左右数字的数值关系。
一一枚举,难道正确的idea会逃走吗?
这种枚举的方式,是不是交给excel更合适?
如何构造关系,先从量词开始,赋予具体的量词。
感觉思考的能量耗尽了,只剩下哀嚎。还能再次微笑吗?
其实不是无话可说,而是迫切想诉说的,却是与题无关的事情,纯然是我对境遇的悲怆。
但是,存在于世上的是我,我的解题,与我别的人生,是不可分割、拒绝分割的整体。
一切路径都会通向解题。
看似情绪的洪流把视野中题目的元素都冲走,我说的话语都再也与题目的元素无关。
我,到底意味着什么。
题目世界中的一切,比起我情绪被唤起的对我也不清楚事物的渴望,根本黯然失色。
可心中又有一个声音,叫我回来,重新关注题目,关注真正的进展。
撕扯。我会有安宁的一天吗。
当我在心灵中关注着我剧烈的悲痛和对人生产生的巨大疑问的时候,什么swap,什么翻转,在这种场合到底算什么。
这是对它们不宜的场合,因此,我的视野中,它们消失了。
可是我能骤然放下当下的风起云涌的心境吗,也做不到啊。
也许时间能冲淡一切,可为什么,我想把命运握在自己手中。
题目世界是上位世界,而当下世界却会困住你以冥想的方式通向上位世界。
光是在上位世界停留就是荣幸。
和我去,去上位世界吧。
对于 3 1 2,可行的操作序列是
swap 3 2 -> 2 1 3
swap 1 3 -> 2 3 1
swap 2 3 -> 3 2 1
swap 1 3 -> 1 2 3
如果两个数字一个是正面,一个是反面,我们翻转它们不会改变总的正面或反面个数
实际上,原来正面的硬币被翻到反面,移动到了原来反面的位置,因此各个位置上正反面的状态不变。
而对于两个面况相同的数字,翻转它们会增加/消灭 2个正面个数。
第一步就会出现这种情况,而最后要求全为正面,与操作前的面况一致,因此最后一步一定是取两个反面的数字,翻转交换它们。
最后一步执行前的序列是1, 2, 3, ..., n中某两个数字交换。
再往回追溯,分支树就变大了,没什么讨论的意义。
用二元操作封装成三元操作,因为从上面的例子中可以看出,我们需要一个正面位置与反面位置配合。
所以至少要3个位置。
猜想可以用最多4步实现把3元排成任何顺序,最终全为正面。
那么我们就可以最多4*ceil(n/3)步完成排序。至少获得了一个O(N)级别的算法。
推广到4元操作呢,甚至推广到n元操作,这样就等于n元操作分解成n+1个二元操作的问题。
对于3 1 2 4,显然4已经正面归位,那么依然只需要4步给3 1 2排序。
如果是3 4 2 1,我们不让4在初始阶段正面归位,我们先对3 4 2操作,同时把4当成新的1。
但是并不是把3 4 2排成4 2 3,因为这样的话最后一步是swap 4 1,会造成两个反面。
那么就得把3 4 2排成某个顺序,使得——
额,只要最后的1不参与,分成两个阶段,前面一个阶段处理前三个数字的顺序,最后一个阶段再让1参与操作的话,
最后一个位置就会被翻到反面(因为前面三个数字结束时都是正面,1参与的操作是把两个正面翻转)
那么不把阶段割裂成两个,而是在排序前三个数字的中途,还有1个反面的时候与1一起运算。
3元操作最多要4步,但是4元中的3元不能直接设想最坏的情况,因为你额外的第一步有后续的效果,然而谁我也说不清这个效果是什么。
对于3元的情况,因为排列情况较少,所以我们可以对于某个具体的排列想出把它排成任何顺序的方案,但是普遍性在哪里?
先把n-1个排列排好,想办法再让第n个归位,这种想法,只要n不是第n个数字(归位),就得至少操作一次位置n,而为了正面条件,推出至少得操作两次位置n。
如果这两次仅仅是为了保证n归位的话,前面n-1个数字最坏又得n次,这样加起来就是n+2次。不行。
所以在两次操作位置n的过程中,一定顺便对前n-1个数字产生了方向性效果。
对于a c b,两次操作a b, c b -> b a c,c归位,只看a b等于把a b的顺序交换,正面朝上。
如果前n-1个数字正好需要这样的操作的话,就可以节省一步。
对于4元来说,就是问前3元中能如何利用这免费提供的不翻转交换操作。
可我连3元的方案的普遍性都没找到,可以从置换环的角度思考吗?
把环分裂成小环,极端退化的情况就是点,对应的就是有序1, 2, 3, ..., n的情况。

浙公网安备 33010602011771号