SP419/422 TRANSP(2) - Transposing is Fun
首先可以发现转置本质上就是一个置换,问题就转化为求一个排列排成有序的最少次数。
这是一个经典问题,答案为点数减循环置换的个数,考虑如何求循环置换。
发现有两个特殊性质:置换为转置,矩阵的边长为 \(2\) 的次幂,据此我们首先不妨写出原本 \(i\) 这个标号换到了什么位置:
\]
注意到所有与 \(i\) 有关的位置都是 \(i - 1\),那么我们将标号整体减 \(1\),置换就可以看作是二进制下补齐到 \(n + m\) 位后往左 shift \(m\) 位所得到的新二进制数。
不妨将所有 \(n + m\) 位的二进制数看成一个元素集合,所有本质不同的 \(k\) 次 shift(一种置换)看作是一种运算,两者一起是否构成一个置换群?
首先,容易得知本质不同的 shift 就是 \(mi \% (n + m)\) 不同的个数,即 \(\frac{n + m}{(m, n + m)} = \frac{n + m}{(n, m)}\).
接下来发现证明这是一个群是容易的,此时发现 \(|X / G|\) 就是原本排列的循环置换个数。
由于所有 \(n + m\) 位二进制数都能选到,于是考虑使用 polya 定理:
\]
考虑第 \(i\) 个置换的循环置换个数,发现他就等价于将所有元素往左 shift \(mi \% (n + m)\) 位,类似地有 \((n + m, (mi) \% (n + m))\) 个循环置换,那么答案为:
令 \(L = \frac{n + m}{(n, m)}\).
\]
根据裴蜀定理,\(mi \% (n + m)\) 的取值集合为 \(i(n, m)(0 \le i \le L - 1)\),则答案即:
& \ \ \ \ \ \frac{1}{L}\sum\limits_i ^ {L - 1} 2 ^ {(n + m, i(n, m))} \\
&= \frac{1}{L}\sum\limits_i ^ {L - 1} 2 ^ {(L, i)(n, m)} \\
&= \frac{1}{L}\sum\limits_{i = 1} ^ L 2 ^ {(L, i)(n, m)} \\
&= \frac{1}{L}\sum\limits_{d \mid L} 2 ^ {d(n, m)} \sum\limits_{i = 1} ^ L [(i, L) = d] \\
&= \frac{1}{L}\sum\limits_{d \mid L} 2 ^ {d(n, m)} \varphi(L / d)
\end{aligned}
\]
注意到 \(d(n, m) \le L(n, m) \le n + m\),那么线性预处理 \(n + m\) 内的 \(\varphi\) 和 \(2\) 的次幂,以及每个数的约数,每次询问枚举所有约数统计答案,复杂度 \(\mathcal{O}(Tn ^ {\frac{1}{3}} + n \ln n)\).
SP419/422 TRANSP(2) - Transposing is Fun的更多相关文章
- 小菜学习设计模式(三)—工厂方法(Factory Method)模式
前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...
- 基础笔记(三):网络协议之Tcp、Http
目录 一.网络协议 二.TCP(Transmission Control Protocol,传输控制协议) TCP头格式 TCP协议中的三次握手和四次挥手 TCP报文抓取工具 三.HTTP(Hyper ...
- python(30) 获取网页返回的状态码,状态码对应问题查询
获取访问网页返回的状态码 html = requests.get(Url) respon = html.status_code 以下内容来自于维基百科:点击查看网页 1xx消息 这一类型的状态码,代表 ...
- ruby -- 基础学习(一)项目文件夹说明
App文件夹子文件夾功能介绍 (1)controllers 存放驱动业务逻辑的控制器 (2)helpers 存放视图辅助类,一些常用的代码段 (3)mailers Rails ...
- 简述WebService的使用(一)
环境: vs版本:vs2013 windows版本:win7 IIS版本:IIS7.0 (如果觉得对您有用,请点击右下角[推荐]一下,让更多人看到,谢谢) 配置环境: 主要针对于IIS ·首先,有很多 ...
- linux设备驱动归纳总结(八):1.总线、设备和驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-109733.html linux设备驱动归纳总结(八):1.总线.设备和驱动 xxxxxxxxxxxx ...
- linux设备驱动归纳总结(三):6.poll和sellct【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-61749.html linux设备驱动归纳总结(三):6.poll和sellct xxxxxxxxxx ...
- 应用层(一)HTTP服务访问基本流程和HTTP报文详解
HTTP属于TCP/IP模型中一个面向文本的应用层协议,所使用的服务器端口号的TCP中的80端口,通信双方在这个基础上进行通信. 每个服务器都有一个应用进程,时刻监听着80端口的用户访问请求.当有用户 ...
- 手写PE文件(一)
DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE ...
随机推荐
- POJ 3264:Balanced Lineup(区间最值查询ST表&线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 75294 Accepted: 344 ...
- 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理。距离远时图片放大,距离近时图片缩小
查看本章节 查看作业目录 需求说明: 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理.距离远时图片放大,距离近 ...
- 1.spring系列之优雅的实现接口统一返回
好处 现在公司开发基本上都是以前后分离模式为主,所以要有个统一的数据格式,这样有什么好处呢? 能够提高前后端对接的效率(特别重要) 代码更加优雅和简洁 对于前端和后端维护更方便容易 实现(直接上代码) ...
- shell2-if判断
1.条件测试类型(判断类型): 将测试结果做为判断依据. 测试类型有以下三种 [ 命令 ] :命令测试法(最常用的) [[ 命令 ]] : 关键字测试 test 命令 以上是三种都可以,注意单词 ...
- 初识python 之 自动拆分转换文本内容
上一篇升级版,转换文件内容. #!/user/bin env python # author:Simple-Sir # time:2021/7/9 23:32 def txt_2_list(filen ...
- python3实现阿里云发短信
一.准备工作 1.安装阿里云SDK pip install aliyun-python-sdk-core-v3 2.新建签名并等待审核通过 审核通过后,记下**[签名名称](参数1)**,程序中会用到 ...
- JMeter_csv文件参数化
CSV Data Set Config 可以从指定的文件中一行一行的提取文本内容,每行的数据通过分隔符拆解,并与变量名一一对应,就可以供取样器引用了. 所以在配置数据时,我们需要把参数化的数据进行分行 ...
- linux安全篇:禁止频繁访问的ip访问nginx
实验环境 版本:redhat6.5ip:172.16.1.100,172.16.10软件:nginx 172.16.1.10部署nginx [root@localhost tools]# lsngin ...
- Zabbix忘记用户名和密码的解决方法
问题描述: 最近刚搭建了zabbix服务器,然后新增加了一个用户,并且把默认的Admin禁用了.然后这个监控页面一直没关,保持了10多天,今天不小心把浏览器关闭了,重新打开后,突然忘记了用户名,这下麻 ...
- JavaScript的执行过程(深入执行上下文、GO、AO、VO和VE等概念)
JavaScript的执行过程 前言 编写一段JavaScript代码,它是如何执行的呢?简单来说,JS引擎在执行JavaScript代码的过程中需要先解析再执行.那么在解析阶段JS引擎又会进行哪些操 ...