【浅谈】置换群
前言
本博客偏 math
。
Valera and Swaps
构造一个操作序列,每次 swap(p[i],p[j])
,使得最终序列经过最少 k
次操作后能使每个 p[i]=i
。输出字典序最小。
结论1.
连边 i->p[i]
,则 操作数=n-环的个数
。
正确性显然。
分类讨论:
- 若
cnt<k
则输出k-cnt
,有如下合并环操作:选取pos[i]!=pos[j]
,执行swap(p[i],p[j])
。 - 若
cnt>k
则输出cnt-k
,有如下拆分环操作:选取pos[i]==pos[j],i!=j
,执行swap(p[i],p[j])
。
方便起见,对于一个环,我们把首位打一个标记。
时间复杂度 O(n^2)
。
[NOIP2005 提高组] 篝火晚会
题意看错了,以为只能交换连续的 m
个位置。。。
说白了你有两个环,问你经过最少几次操作后一模一样。
显然 a->b
和 b->a
等价,假设样例给的环是这样:
显然也可以逆时针构造,所以要跑两次:
环上问题考虑破成 2n
链: 1 4 2 3 1 4 2 3
结论1:
最小操作次数 n-k
,其中 k
表示相对位相同的个数。
举例 1 4 2 3 , k=1
; 1 3 2 4 , k=2
。所以样例答案为 2
。
暴力枚举初始点 i
,然后暴力匹配,时间复杂度 O(n^2)
。
显然可以用桶优化,如下图:
Moodular Arithmetic
首先观察,样例 9=3*3
且 25=5*5
,猜测答案就是 n^k
。
再仔细观察,发现 k
就是环的个数。但是要特判 k=1
的情况,此时答案就是 n^n
。
至于连边,你把 f
函数的自变量 x->k*x%p
连边,很容易看出是完全剩余系吧。
__EOF__

本文作者:仰望星空的蚂蚁
本文链接:https://www.cnblogs.com/cqbzly/p/17530319.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cqbzly/p/17530319.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」