LINK:Just Shuffle

比较怂群论 因为没怎么学过 置换也是刚理解。

这道题是 已知一个置换\(A\)求一个置换P 两个置换的关键为\(P^k=A\)

且k是一个大质数.

做法是李指导教我的.

\(k\sqrt{A}=p\)即\(A^{\frac{1}{k}}=p\)

设当前置换大小为r 那么有 \(A^r=I\)其中I为单位置换.

\(A^{r+1}=A\)那么有\(A^{ar+1}=A\) 原式等于\(A^{\frac{ar+1}{k}}=P\)

那么只需要随便找个a满足\(k|ar+1\)即可。由于k是大质数一定有解.

等价于求\(ar+1=0(mod k)\) 解不定方程即可 最后可以线性推出答案。

code
  1. //#include<bits\stdc++.h>
  2. #include<iostream>
  3. #include<iomanip>
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<string>
  7. #include<ctime>
  8. #include<cmath>
  9. #include<cctype>
  10. #include<cstdlib>
  11. #include<queue>
  12. #include<deque>
  13. #include<stack>
  14. #include<vector>
  15. #include<algorithm>
  16. #include<utility>
  17. #include<bitset>
  18. #include<set>
  19. #include<map>
  20. #define ll long long
  21. #define db double
  22. #define INF 10000000000000000ll
  23. #define ldb long double
  24. #define pb push_back
  25. #define put_(x) printf("%d ",x);
  26. #define get(x) x=read()
  27. #define gt(x) scanf("%d",&x)
  28. #define gi(x) scanf("%lf",&x)
  29. #define put(x) printf("%d\n",x)
  30. #define putl(x) printf("%lld\n",x)
  31. #define gc(a) scanf("%s",a+1)
  32. #define rep(p,n,i) for(RE int i=p;i<=n;++i)
  33. #define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
  34. #define fep(n,p,i) for(RE int i=n;i>=p;--i)
  35. #define vep(p,n,i) for(RE int i=p;i<n;++i)
  36. #define pii pair<int,int>
  37. #define mk make_pair
  38. #define RE register
  39. #define P 1000000007
  40. #define gf(x) scanf("%lf",&x)
  41. #define pf(x) ((x)*(x))
  42. #define uint unsigned long long
  43. #define ui unsigned
  44. #define EPS 1e-4
  45. #define sq sqrt
  46. #define S second
  47. #define F first
  48. #define mod 1000000007
  49. #define V vector<int>
  50. #define l(x) t[x].l
  51. #define r(x) t[x].r
  52. #define sum(x) t[x].sum
  53. #define cnt(x) t[x].cnt
  54. using namespace std;
  55. char buf[1<<15],*fs,*ft;
  56. inline char getc()
  57. {
  58. return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
  59. }
  60. inline int read()
  61. {
  62. RE int x=0,f=1;RE char ch=getc();
  63. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
  64. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
  65. return x*f;
  66. }
  67. const int MAXN=100010,maxn=40010;
  68. int n,k;
  69. int a[MAXN],vis[MAXN],b[MAXN];
  70. vector<int>w;
  71. int xx,yy;
  72. inline void exgcd(int a,int b)
  73. {
  74. if(!b){xx=1;yy=0;return;}
  75. exgcd(b,a%b);
  76. int zz=xx;xx=yy;yy=zz-a/b*yy;
  77. }
  78. inline void calc(int a,int b,int c)
  79. {
  80. exgcd(a,b);
  81. yy=(yy%a+a)%a;
  82. }
  83. inline void solve()
  84. {
  85. calc(w.size(),k,-1);
  86. vep(0,w.size(),i)b[w[i]]=w[(i+yy)%w.size()];
  87. }
  88. int main()
  89. {
  90. //freopen("1.in","r",stdin);
  91. get(n);get(k);
  92. rep(1,n,i)get(a[i]);
  93. rep(1,n,i)
  94. {
  95. if(!vis[i])
  96. {
  97. w.clear();
  98. int x=a[i];
  99. while(!vis[x])
  100. {
  101. vis[x]=1;
  102. w.pb(x);
  103. x=a[x];
  104. }
  105. solve();
  106. }
  107. }
  108. rep(1,n,i)put_(b[i]);
  109. return 0;
  110. }

2020牛客暑期多校训练营 第二场 J Just Shuffle 置换 群论的更多相关文章

  1. 2020牛客暑期多校训练营 第二场 K Keyboard Free 积分 期望 数学

    LINK:Keyboard Free 我要是会正经的做法 就有鬼了. 我的数学水平没那么高. 三个同心圆 三个动点 求围成三角形面积的期望. 不会告辞. 其实可以\(n^2\)枚举角度然后算出面积 近 ...

  2. 2020牛客暑期多校训练营 第二场 I Interval 最大流 最小割 平面图对偶图转最短路

    LINK:Interval 赛时连题目都没看. 观察n的范围不大不小 而且建图明显 考虑跑最大流最小割. 图有点稠密dinic不太行. 一个常见的trick就是对偶图转最短路. 建图有点复杂 不过建完 ...

  3. 2020牛客暑期多校训练营 第二场 C Cover the Tree 构造 贪心

    LINK:Cover the Tree 最受挫的是这道题,以为很简单 当时什么都想不清楚. 先胡了一个树的直径乱搞的贪心 一直过不去.后来意识到这类似于最经典长链剖分优化贪心的做法 然后那个是求最大值 ...

  4. 2020牛客暑期多校训练营 第二场 B Boundary 计算几何 圆 已知三点求圆心

    LINK:Boundary 计算几何确实是弱项 因为好多东西都不太会求 没有到很精通的地步. 做法很多,先说官方题解 其实就是枚举一个点 P 然后可以发现 再枚举一个点 然后再判断有多少个点在圆上显然 ...

  5. 2020牛客暑期多校训练营 第二场 A All with Pairs 字符串hash KMP

    LINK:All with Pairs 那天下午打这个东西的时候状态极差 推这个东西都推了1个多小时 (比赛是中午考试的我很困 没睡觉直接开肝果然不爽 一开始看错匹配的位置了 以为是\(1-l\)和\ ...

  6. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  7. 2020牛客暑假多校训练营 第二场 H Happy Triangle set 线段树 分类讨论

    LINK:Happy Triangle 这道题很容易. 容易想到 a+b<x a<x<b x<a<b 其中等于的情况在第一个和第三个之中判一下即可. 前面两个容易想到se ...

  8. 2020牛客暑假多校训练营 第二场 G Greater and Greater bitset

    LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. ...

  9. 2020牛客暑假多校训练营 第二场 E Exclusive OR FWT

    LINK:Exclusive OR 没做出 原因前面几篇说过了. 根据线性基的知识容易推出 不超过\(w=log Mx\)个数字即可拼出最大值 其中Mx为值域. 那么考虑w+2个数字显然也为最大值.. ...

随机推荐

  1. REST,RPC和GraphQL应用场景,WebHooks、WebSocket、HTTP Streaming应用场景。

    一.请求--响应API. 请求--响应类的API的典型做法是,通过基于HTTP的Web服务器暴露一个/套接口.API定义一些端点,客户端发送数据的请求到这些端点,Web服务器处理这些请求,然后返回响应 ...

  2. testNG jar包启动找不到org.testng.TestNG

    主要是因为打包时依赖的jar包没有打入,网上有很多需要将对应的jar单独拷贝出来然后通过classpath引用启动,但是感觉这个就是个无底洞.拷贝了这么多个包最后还是说找不到ObjectId 启动命令 ...

  3. Dynamics CRM Performance Issue when CRM Forms Opening

    事情发生在Dynamics CRM 8.2.2版本,客户新升级到这个版本几个月的时间. 突然有一天,客户反映为什么我们打开CRM Form页面的时候loading的时间这么长呢?大概会需要5-15分钟 ...

  4. Flask-Limit使用详细说明

    Flask-Limit详细说明 在flask项目中我们需要对全部或者一部分接口进行限制,又不想造轮子,那怎么办呢? 所以这就是flask-limit出现的原因,不过对于相对复杂的需求,还是自己造轮子吧 ...

  5. python 读取指定文件夹中的指定文件类型的文件名

    import numpy as np import os path = 'F:\\wenjian'#指定文件所在路径 filetype ='.csv'#指定文件类型 def get_filename( ...

  6. java 基本语法(十七)Lambda (四)构造器引用与数组引用

    1.构造器引用格式:类名::new 2.构造器引用使用要求:和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致.抽象方法的返回值类型即为构造器所属的类的类型 3.构造器引用举例: / ...

  7. 数据可视化之 图表篇(二)如何用Power BI制作疫情地图?

    丁香园制作的这个地图可视化,相信大家每天都会看好几遍,这里不讨论具体数据,仅来探讨一下PowerBI地图技术. 这个地图很简洁,主要有三个特征: 1,使用着色地图,根据数据自动配色 2,只显示中国地图 ...

  8. SQLAlchemy(四):SQLAlchemy查询高级

    目录 SQLAlchemy04 /SQLAlchemy查询高级 1.排序 2.limit.offset和切片操作 3.懒加载 4.group_by 5.having 6.join 7.subquery ...

  9. python 面向对象专题(十一):特殊方法 (四)__get__、__set__、__delete__ 描述符(四)描述符用法建议

    使用特性以保持简单 内置的 property 类创建的其实是覆盖型描述符,__set__ 方法和__get__ 方法都实现了,即便不定义设值方法也是如此. 特性的__set__ 方法默认抛出 Attr ...

  10. 集合-ConcurrentLinkedQueue 源码解析

    问题 (1)ConcurrentLinkedQueue是阻塞队列吗? (2)ConcurrentLinkedQueue如何保证并发安全? (3)ConcurrentLinkedQueue能用于线程池吗 ...