Atcoder Grand Contest 031 D - A Sequence of Permutations(置换+猜结论)
猜结论神题。
首先考虑探究题目中 \(f\) 函数的性质,\(f(p,q)_{p_i}=q_i\leftarrow f(p,q)\circ p=q\),其中 \(\circ\) 为两个置换的复合,\(a\circ b\) 为满足 \(p_{i}=a_{b_i}\) 的置换 \(p\),有点类似于函数的复合,u1s1 我一直把它当作乘法运算,因此总没搞清楚,心态爆炸……等式两边同乘 \(p\) 的复合逆 \(p^{-1}\) 可得 \(f(p,q)=q\circ p^{-1}\)。顺带一提复合满足性质 \((p\circ q)^{-1}=q^{-1}\circ p^{-1}\),这个对后面打表找规律有很大作用。
接下来考虑探究置换序列 \(a\) 的性质,我们不妨根据刚刚的性质先写出 \(a\) 的前几项看看瞧:
\]
\]
\]
\]
\]
\]
\]
注意到这东西是一个类似于线性递推的东西,并且此题 \(k\) 高达 \(10^9\),因此暴力推下去肯定是不行的,不过注意到相邻两项的 \(p,q\) 之间存在一些联系,具体来说,下一项实际上是对上一项进行如下变换:
- 将所有 \(p\) 用 \(q\) 代替,\(p^{-1}\) 用 \(q^{-1}\) 代替
- 将所有 \(q\) 用 \(q\circ p^{-1}\) 代替,\(q^{-1}\) 用 \(p\circ q^{-1}\) 代替
那有人就问了,知道这个性质有什么用呢?你就算做了这样一个转化,还不照样还是要递推吗?
这里又有一个考验眼力的地方,注意到 \(a_5\) 中出现了一个式子叫做 \(q\circ p^{-1}\circ q^{-1}\circ p\),我们不妨对其做一遍上面的变换,可得 \((q\circ p^{-1})\circ q^{-1}\circ (p\circ q^{-1})\circ q\),削消一下发现它就是 \(q\circ p^{-1}\circ q^{-1}\circ p\),也就是说从 \(a_5\) 开始出现的 \(q\circ p^{-1}\circ q^{-1}\circ p\) 在变换前后不会发生变化,记 \(A=q\circ p^{-1}\circ q^{-1}\circ p\),继续往下写几项可得:
\]
\]
\]
\]
发现了什么?\(p^{-1}\circ q\circ p\circ q^{-1}\) 就是 \(A^{-1}\),因此 \(a_8\) 就等于 \(A\circ q\circ A^{-1}\),按照上面的方式 \(a_7\) 也可变形为 \(A\circ p\circ A^{-1}\)。
\(A,A^{-1}\) 在变换前后都可看作不动点,因此 \(a\) 序列可以看作类周期性变化的,即 \(a_n=A\circ a_{n-6}\circ A^{-1}\)
矩阵快速幂即可。
总之是一道考验眼力的猜结论神题。
const int MAXN=1e5;
int n,k;
struct perm{
int a[MAXN+5];
perm(){for(int i=1;i<=n;i++) a[i]=i;}
perm operator *(const perm &rhs) const{
perm ret;
for(int i=1;i<=n;i++) ret.a[i]=a[rhs.a[i]];
return ret;
}
} p,q;
perm inv(perm x){
perm ret;
for(int i=1;i<=n;i++) ret.a[x.a[i]]=i;
return ret;
}
perm qpow(perm x,int e){
perm ret;
for(;e;e>>=1,x=x*x) if(e&1) ret=ret*x;
return ret;
}
int main(){
scanf("%d%d",&n,&k);k--;perm ans;
for(int i=1;i<=n;i++) scanf("%d",&p.a[i]);
for(int i=1;i<=n;i++) scanf("%d",&q.a[i]);
perm A=q*inv(p)*inv(q)*p;
if(k%6==0) ans=p;
if(k%6==1) ans=q;
if(k%6==2) ans=q*inv(p);
if(k%6==3) ans=A*inv(p);
if(k%6==4) ans=A*inv(q);
if(k%6==5) ans=A*p*inv(q);
ans=qpow(A,k/6)*ans*qpow(inv(A),k/6);
for(int i=1;i<=n;i++) printf("%d ",ans.a[i]);
return 0;
}
Atcoder Grand Contest 031 D - A Sequence of Permutations(置换+猜结论)的更多相关文章
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
- AtCoder Grand Contest 031题解
题面 传送门 题解 比赛的之后做完\(AB\)就开始发呆了--简直菜的一笔啊-- \(A - Colorful\ Subsequence\) 如果第\(i\)个字母选,那么它前面任意一个别的字母的选择 ...
- AtCoder Grand Contest 031 (AGC031) D - A Sequence of Permutations 其他
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC031D.html 前言 比赛的时候看到这题之后在草稿纸上写下的第一个式子就是 $$f(p,q) = pq^ ...
- AtCoder Grand Contest 031 B - Reversi
https://atcoder.jp/contests/agc031/tasks/agc031_b B - Reversi Time Limit: 2 sec / Memory Limit: 1024 ...
- AtCoder Grand Contest 031 B - Reversi(DP)
B - Reversi 题目链接:https://atcoder.jp/contests/agc031/tasks/agc031_b 题意: 给出n个数,然后现在你可以对一段区间修改成相同的值,前提是 ...
- UPC个人训练赛第十五场(AtCoder Grand Contest 031)
传送门: [1]:AtCoder [2]:UPC比赛场 [3]:UPC补题场 参考资料 [1]:https://www.cnblogs.com/QLU-ACM/p/11191644.html B.Re ...
- [AtCoder Grand Contest 024 Problem E]Sequence Growing Hard
题目大意:考虑 N +1 个数组 {A0,A1,…,AN}.其中 Ai 的长度是 i,Ai 内的所有数字都在 1 到 K 之间. Ai−1 是 Ai 的子序列,即 Ai 删一个数字可以得到 Ai−1. ...
- Atcoder Grand Contest 024 E - Sequence Growing Hard(dp+思维)
题目传送门 典型的 Atcoder 风格的计数 dp. 题目可以转化为每次在序列中插入一个 \([1,k]\) 的数,共操作 \(n\) 次,满足后一个序列的字典序严格大于前一个序列,问有多少种操作序 ...
- AtCoder Grand Contest 003
AtCoder Grand Contest 003 A - Wanna go back home 翻译 告诉你一个人每天向哪个方向走,你可以自定义他每天走的距离,问它能否在最后一天结束之后回到起点. ...
随机推荐
- 新手小白在github上部署一个项目
新手小白在github上部署一个项目 一. 注册github账号 github地址:https://www.github.com/ 二.下载安装Git 地址:https://git-scm.com/d ...
- 性能利器 Takin 来了!首个生产环境全链路压测平台正式开源
6 月 25 日,国内知名的系统高可用专家数列科技宣布开源旗下核心产品能力,对外开放生产全链路压测平台产品的源代码,并正式命名为 Takin. 目前中国人寿.顺丰科技.希音.中通快递.中国移动.永辉超 ...
- nssm.exe使用方法
nssm no-sucking service manager 1. 安装服务命令 nssm install <servicename> nssm install <servicen ...
- TortoiseGit使用
TortoiseGit 前言: 其实作为一名学生,还未接触过企业级开发项目,基本都是一个人在本地敲代码,对于项目管理工具使用的并不多,最常用的命令也就是git clone了,hhh: 前些日子了解了一 ...
- [敏捷软工团队博客]The Agiles 团队介绍&团队采访
项目 内容 课程:北航-2020-春-敏捷软工 博客园班级博客 作业要求 团队作业-团队介绍和采访 团队名称来源 The Agile is The Agile. 敏捷就是敏捷.我们只是敏捷的践行者罢了 ...
- spring cloud zuul的回退
当我们使用 @EnableZuulProxy 注解来开启zuul的路由时,默认在@EnableZuulProxy注解上就包含了@EnableCircuitBreaker注解,即开启了断路器功能.那么在 ...
- CSS 奇技淫巧 | 巧妙实现文字二次加粗再加边框
本文将通过一个实际的业务需求,讲解如何实现 极端场景下文字加粗加边框效果 文字多重边框的效果 需求背景 - 文字的二次加粗 今天遇到这样一个有意思的问题: 在文字展示的时候,利用了 font-weig ...
- netty系列之:netty实现http2中的流控制
目录 简介 http2中的流控制 netty对http2流控制的封装 Http2FlowController Http2LocalFlowController Http2RemoteFlowContr ...
- 从零开始 DIY 智能家居 - 基于 ESP32 的智能紫外线传感器模块
目录 前言 硬件选择 二.使用步骤 获取代码 设备控制命令: 设备和协议初始化流程: 配置设备信息 回调函数注册 数据获取与上报流程 总结 前言 做了这么多传感器都是自己玩,这次家里人看不下去了,非得 ...
- DeWeb第1个通用化模块:登录模块,仅需要修改一个配置文件即可实现登录功能
演示: https://delphibbs.com/login.dw 开发环境和源代码 https://gitee.com/xamh/dewebsdk 效果图: 配置方法: 在Runtime目录中放一 ...