构造题专练

[THUPC2022 初赛] 造计算机

这是一道很水的构造题

首先我们把一个置换拆分成若干个循环置换的乘积,例如:

请添加图片描述
讲一下怎么通过循环置换还原成原来那个:

在这里插入图片描述

请添加图片描述

这样的话,上面那一行表示下标,下面那一行表示对应位置上的数。

这道题经过简单分析我们可以发现 m=1 是不可能的,因此很自然而然地想到 m=2 就是答案。

因为每个环之间是独立的,所以我们分别分析。

先来看这个置换:

请添加图片描述

一个很自然的想法是按(3,2,1)即循环置换的顺序来操作,会很舒服地发现基本所有数都能归位,但最后一步却无论如何也执行不了。

请添加图片描述
经过简单分析我们发现原因在于 :

  1. 一个非寄存器的位置占据了原本寄存器的位置,导致原本的寄存器无法归位
  2. 另一个寄存器没有发挥用处

于是我的解决方案是:我们在做上述操作前,把这两个寄存器和非寄存器的位置先调换一下,然后再用另一个寄存器来操作。最后原来那个寄存器被调换了出来,而另一个寄存器则可以和 n+1 位置调换,也能被调换出来。

请添加图片描述
此时我们再回看原来的循环置换:

请添加图片描述
可以发现我完全就是在复制这个置换上的操作,只不过加了少量调整而已。而如果仔细观察的话,会发现我操作的位置其实就是这个循环置换的首尾,所以其实并不难寻找。

总结:这道题我主要是突然有了灵感,想到在循环置换的形式上做文章,最后得到了合适的构造方案。


__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530149.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(21)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示