置换介绍

定义:\(p_1, \cdots, p_n\) 是 \(1 - n\) 的排列,则 \(\pi = \begin{pmatrix} 1 & 2 & \cdots & n \\ p_1 & p_2 & \cdots & p_n\end{pmatrix}\) 是一个置换。置换是一个排列到排列的一一映射(\(i \rightarrow p_i\))。

\(e = \begin{pmatrix}1 & 2 & \cdots & n \\ 1 & 2 & \cdots & n\end{pmatrix}\) 是一个单位元。

置换的乘法和函数的复合本质一样。

置换的逆元定义与数论逆元相似,都是 \(p \times p^{-1} = e\)。

置换满足封闭性,置换的乘法满足结合律。

如果有一个置换 \((c_1, c_2, \cdots, c_k)\),且 \(c_1 \rightarrow c_2, c_2 \rightarrow c_3, \cdots, c_k \rightarrow c_1\),那么这个置换就是轮换。

因此,容易发现一个置换能被唯一分解成若干个轮换。这种分解被称为轮换分解。

置换可以分为两种类型:奇置换和偶置换。其中,偶置换是指置换的逆序对个数为偶数的置换,奇置换相反。

一个小结论:一个置换乘上一个对换,它的奇偶性会改变。

对于置换,还有一种分类方法。我们考虑置换的每个轮换分解的大小构成的集合。我们称 \(\Pi_{i = 1}^n i^{c_i}\) 类置换是有 \(c_i\) 个大小为 \(i\) 的轮换。

Cauchy 公式

Cauchy 公式:有 \(\frac{n!}{\prod_{i=1}^n c_i! \times \prod_{i = 1}^n i^{c_i}}\) 个类型为 \(\prod_{i = 1}^n i^{c_i}\) 的置换。

以下为感性计算。

我们先考虑每个轮换内的情况。显然,假设有一个大小为 \(x\) 的轮换,则与他相等的轮换还有 \(x - 1\) 个,总共 \(x\) 个。因此,我们应当将答案乘上 \(\frac{1}{x}\)。

我们再考虑相同大小的轮换。我们发现,这些轮换可能通过轮换之间的排列得到与原来一致的置换,因此,我们应当将答案乘上 \(\frac{1}{c_i!}\)。

综上,答案为 \(\frac{n!}{\prod_{i=1}^n c_i! \times \prod_{i = 1}^n i^{c_i}}\)。

例一 CF612E Square Root of Permutation

简要题意:给定置换 \(p\),构造置换 \(q\) 使得 \(q^2 = p\)。

我们考虑对于每一个轮换 \(t\),它的平方是什么样的。假设 \(t\) 的长度为奇数,容易发现 \(t ^ 2\) 的长度还是和原来相等。而如果 \(t\) 的长度为偶数,则 \(t^2\) 是两个大小相等的轮换。因此,我们算出 \(p\) 的各个轮换。对于相等偶数长度的轮换,两两匹配,奇数长的的轮换调整顺序即可。如果不能被分配完就是无解。

例二 P4161 游戏

简要题意:有多少种不同的长度为 \(n\) 的置换的阶,其中 $ n \leq 1000$。

假设对于一个置换 \(p\),它的轮换分解中轮换的大小为 \(c_1, \cdots, c_k\),显然该置换的阶是 \(\text{lcm}\{c_1, \cdots, c_k\}\)。那么问题转化为当 \(\sum_{i = 1}^n c_i = n\) 时,\(\text{lcm}\{c_1, \cdots, c_k\}\) 的不同种数。

发现由于 \(\text{lcm}\) 太大不好做,而且不同种数似乎并不好计算,于是自然地想到找到一个一一映射。容易发现可以加一个限制条件,就是 \(c\) 两两互素。

如果有 \((dk_1, dk_2) = d\),其中 \(d > 1\),可以被 \(dk_1, k_2, 1, 1, \cdots, 1\) 等效替代。

同理,可以再加一个限制条件:每个 \(c_i\) 必是 \(1\) 或者 \(p_{x}\),其中 \(p\) 为素数。

如果有 \(c_i = p^xy\),可以拆成 \(p^x, y, 1, \cdots, 1\)。

容易发现,如果我们强制 \(c_i\) 有序,则此时的 \(c_i\) 个数与 \(\text{lcm}\) 个数一一映射。

如果我们把 \(1\) 去掉,则问题变成 \(c_i = p_i^x\),\(p_i\) 单调递增,\(\sum_{i = 1}^n c_i \leq n\) 的个数有多少。简单线性 dp 可以做到。

void solve() {
n = read();
Eular(n);
dp[0][0] = 1;
for (int i = 1; i <= tot; i ++) {
for (int j = 0; j <= n; j ++) {
dp[i][j] = dp[i - 1][j];
for (int k = 1, now = pr[i]; now <= j; k ++, now *= pr[i])
dp[i][j] += dp[i - 1][j - now];
}
}
long long ans = 0;
for (int j = 0; j <= n; j ++)
ans += dp[tot][j];
cout << ans << '\n';
}

CM 2-2 学习文章的更多相关文章

  1. Java 学习文章汇总

    目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...

  2. webview之学习文章(待续)

    webview与js交互: Tencent/VasSonic(缓存优化方案) lzyzsd/JsBridge: pengwei1024/JsBridge: -----webview的框架 TheFin ...

  3. JavaEE学习文章汇总-并发,集群,分布式

    以下文章来自博客 http://blog.csdn.net/FX_SKY/article/category/6203839 其中包括 集群Zookeeper 环境搭建 http://blog.csdn ...

  4. Zookeeper学习文章目录1

    目录:参考文章如下 1.ZooKeeper学习第一期---Zookeeper简单介绍 2. ZooKeeper学习第二期--ZooKeeper安装配置 3. ZooKeeper学习第三期---Zook ...

  5. Python 学习文章收藏

    作者 标题 rollenholt Python修饰器的函数式编程 - Rollen Holt - 博客园 rollenholt python操作gmail - Rollen Holt - 博客园 ro ...

  6. nginx配置学习文章

    partOne 自我释义部分 我的是阿里云的ubuntu *******实际上感觉这里是基本配置,很用不到*********#定义其用户或用户组user www-data;#nginx的进程数,应当为 ...

  7. Dubbo源码学习文章目录

    目录 Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 Dubbo源码学习--注册中心分析 Dubbo源码学习--集群负载均衡算法的实现

  8. react 学习文章

    生命周期 学习笔记 一些坑 项目完成后总结 理解Immutable 是否要同构如何同构 react组件最佳实践 redux集合所有的state props来源, 页面所有状态 数据的唯一来源 reac ...

  9. 系列文章--WCF后传学习文章

    WCF后传系列(10):消息处理功能核心 摘要: WCF是一个通信框架,同时也可以将它看成是一个消息处理或者传递的基础框架,它可以接收消息.对消息做处理,或者根据客户端给定的数据构造消息并将消息发送到 ...

  10. Asp.net Core学习文章

    杜现鹏的Asp.net Core文章 EF Core 官方教程 https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new- ...

随机推荐

  1. 树-BST基本实现

    之前的数组, 栈, 链表, 队列等都是顺序数据结构, 这里来介绍一个非顺序数据结构, 树. 树在处理有层级相关的数据时非常有用, 还有在存储数据如数据库查询实现等场景也是高频使用. 作为一种分层数据的 ...

  2. ISCC2025破阵夺旗赛三阶段Misc详解 By Alexander

    ISCC2025破阵夺旗赛三阶段Misc详解 By Alexander 写在前面:十八天吃石终于结束了,第一次就让我见到了这个比赛有多么的构式,平台是构式的,睡一觉就1000解了,全是对flag的渴望 ...

  3. JVM划重点:引用类型、垃圾回收算法和内存划分

    一.Java四种引用类型    每种编程语言都有操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过"引用"(Reference).在 Java ...

  4. Coze工作流实战:一键生成像素风格视频

    前言 最近像素画风的视频非常火,一个视频浏览量超过10w+的也有很多. 那么这个是怎么实现的? 其实,通过AI工作流可以比较简单地实现这样的短视频. 今天给大家分享一下,我是如何搭建工作流实现的. 欢 ...

  5. 【语义分割专栏】4:deeplab系列原理篇

    目录 前言 背景介绍 Deeplab系列讲解 Deeplabv1 去池化和全连接层 空洞卷积(Atrous Convolution) 全连接条件随机场(Fully - connected Condit ...

  6. Kafka入门实战教程(3).NET Core操作Kafka

    1 可用的Kafka .NET客户端 作为一个.NET Developer,自然想要在.NET项目中集成Kafka实现发布订阅功能.那么,目前可用的Kafka客户端有哪些呢? 目前.NET圈子主流使用 ...

  7. 问题 1:MyBatis-plus-3.5.9 的分页功能修复

    问题:后端由于字符内容过长,前端展示精度丢失修复 虽然我们在 Swagger 接口测试中并没有看到精度丢失的错误,但是在测试‏中,如果你打开 F12‎ 控制台,利用预览来查 看响应数据,就会发现另⁡一 ...

  8. 论文解读:MASS-EDITING MEMORY IN A TRANSFORMER(MEMIT)

      论文发表于人工智能顶会ICLR(原文链接).在模型编辑方法中,过去工作主要局限于更新单个事实.因此,基于ROME,本文开发了MEMIT,在大模型GPT-J(6B)和GPT-NeoX(20B)上实现 ...

  9. Rust修仙之道 第十四章 宏灵境 · 灵咒重铸之术

    第十四章:宏灵境 · 灵咒重铸之术 "术之极者,可铸术自身:言之极者,语法亦可铸." 顾行云在整理灵术模块时,发现冗余术式重复繁复,若能一术生万术,岂非大成? 此时,一道灵书显现: ...

  10. Lambert 光照模型

    简介 lambert 光照模型可以说是最简单的光照模型了. 主要考虑了 漫反射. 漫反射也单单考虑了经验模型. 主要观察 面片渲染器(我是这么叫的) 参考链接 https://zhuanlan.zhi ...