LA 3641 Leonardo的笔记本

题目

给出26个大写字母的置换B,问是否存在要给置换A,使得 \(A^2 = B\)

分析

将A分解为几个循环,可以观察经过乘积运算得到\(A^2\)后,循环有什么不同。将循环画成一个环,给他们标号\(0,1,\cdots,n-1\), 0号指向1号,n-1号指向1号。如果 n 是奇数,那么可以发现\(A^2\)中,0号指向了2号,2号指向了4号...n-1号指向了1号,1号指向3号...n-2号指向0号,他们依然是一个环。但是如果 n 是偶数,那么0号指向了2号,2号指向了4号,n-2号指向了0号,这一半元素单独构成一个环,另一半元素单独构成一个环。

回到题目中,我们找到B中所有的环,对于B中长度为奇数的环,我们可以选择在A中用同样长度的一个环来得到它,也可以选择用一个长度为2倍的环来得到它。而对于B中长度为偶数的环,我们只能选择在A中用长度为它二倍的环来得到它,所以在B中同一长度为偶数的环,他们的个数必须是偶数个。

  1. char s[30];
  2. int T, vis[N], cnt[30];
  3. int main() {
  4. scanf("%d", &T);
  5. while(T--){
  6. scanf("%s", s);
  7. memset(cnt, 0, sizeof cnt);
  8. memset(vis, 0, sizeof vis);
  9. for (int i = 0; i < 26;i++){
  10. if(!vis[i]){
  11. int j = i, n = 0;
  12. do{
  13. vis[j] = 1;
  14. j = s[j] - 'A';
  15. n++;
  16. } while (j != i);
  17. cnt[n]++;
  18. }
  19. }
  20. int flag = true;
  21. for (int i = 2; i <= 26;i+= 2){
  22. if(cnt[i] % 2 == 1)
  23. flag = false;
  24. }
  25. puts(flag ? "Yes" : "No");
  26. }
  27. return 0;
  28. }

UVA 11077 排列统计

题意:

给定一个长度为n的排列,可以通过一系列的交换变成{1,2,3,...n}。给定n和k,统计有多少个排列至少需要交换 k 次才能变成{1,2,...,n}。

分析

把这个长度为n的排列看成一个置换,我们每次交换操作肯定是在循环中选择两个数字进行交换。每次交换可以等效于将环的长度减1,也就是把某个元素从环中剔除。(可以举几个例子),所以c个元素的循环,总共需要c-1次交换操作。

f[i][j]为长度为i的循环需要交换 j 次才能变成顺序排列的排列个数。

则\(f[i][j] = f[i-1][j-1] * (i-1) + f[i-1][j]\)

前面的表示将第 i 个元素随便插入到前面 i-1 个元素组成的若干个圆排列中(联系第一类斯特林数),后面的表示将第 i 个元素单独构成一个环,它并不对交换操作造成贡献

  1. ull f[N][N];
  2. int main() {
  3. memset(f, 0, sizeof f);
  4. f[1][0] = 1;
  5. for (int i = 2; i <= 21;i++){
  6. for (int j = 0; j < i;j++){
  7. f[i][j] = f[i - 1][j];
  8. if(j > 0)
  9. f[i][j] += f[i - 1][j - 1] * (i - 1);
  10. }
  11. }
  12. int n, k;
  13. while(scanf("%d%d",&n,&k) == 2 && n)
  14. printf("%llu\n", f[n][k]);
  15. return 0;
  16. }

LA 3641 Leonardo的笔记本 & UVA 11077 排列统计的更多相关文章

  1. UVA 11077 - Find the Permutations(递推)

    UVA 11077 - Find the Permutations option=com_onlinejudge&Itemid=8&page=show_problem&cate ...

  2. Leonardo的笔记本LA 3641——置换的乘法

    题意 给出26个大写字母的置换 $B$,问是否存在一个置换 $A$,使得 $A^2=B$. 分析 首先,若A=BC,若B和C都能表示成两个相同循环的乘积,则A也能. 因为,不相交的循环的乘积满足交换律 ...

  3. LA 3641 (置换 循环的分解) Leonardo's Notebook

    给出一个26个大写字母的置换B,是否存在A2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A2就相当于将项链旋转了两 ...

  4. 【LA 3641】 Leonardo's Notebook (置换群)

    [题意] 给出26个大写字母组成 字符串B问是否存在一个置换A使得A^2 = B [分析] 置换前面已经说了,做了这题之后有了更深的了解. 再说说置换群.   首先是群. 置换群的元素是置换,运算时是 ...

  5. Uva 11077 Find the Permutations [置换群 DP]

    题意: 给定$n$和$k$,问有多少排列交换$k$次能变成升序 $n \le 21$ $uva$貌似挂掉了$vjudge$上一直排队 从某个排列到$1,2,...,n$和从$1,2,...,n$到某个 ...

  6. LA 3644 - X-Plosives ( 也即UVA 1160)

    LA看题 请点击:传送门 UVA 上也有这题 :UVA 1160 - X-Plosives 题目大意就是如果车上存在 k 个简单化合物,正好包含 k 种元素 ,那么它们将有危险,此时你应该拒绝装车. ...

  7. UVa 11077 (循环分解 递推) Find the Permutations

    把{1, 2, 3,,, n}叫做自然排列 本题便是求有多少个n元排列P要至少经过k次交换才能变为自然排列. 首先将排列P看做置换,然后将其分解循环,对于每个长度为i的循环至少要交换i-1次才能归位. ...

  8. UVa 11077 Find the Permutations(置换+递推)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35431 [思路] 置换+递推 将一个排列看作一个置换,分解为k个循 ...

  9. UVa 11077 Find the Permutations (计数DP)

    题意:给定 n 和 m,问你在 1 ~ n 的所有排列中,有多少个排列满足至少要交换 m 次才能变成 1 2 3 ... n. 析:首先,先考虑一下,某个排列,要变成 1 2 3 .. n,最少要交换 ...

随机推荐

  1. vue的路由组件挂载。

    vue通过多种方式可以将组件挂载到一个页面上.挂载方式有四种.其实也并不止四种.这里呢就简单的提四种方式去怎样挂载组件. 第一种就是作为标签形式挂载.前面也提到. 后面的就是一般的挂载组件和按需挂载组 ...

  2. Java 并发编程要点

    使用线程 有三种使用线程的方法: 实现 Runnable 接口: 实现 Callable 接口: 继承 Thread 类. 实现 Runnable 和 Callable 接口的类只能当做一个可以在线程 ...

  3. RandomForest 随机森林算法与模型参数的调优

    公号:码农充电站pro 主页:https://codeshellme.github.io 本篇文章来介绍随机森林(RandomForest)算法. 1,集成算法之 bagging 算法 在前边的文章& ...

  4. kafka安装流程

    本文是作者原创,版权归作者所有.若要转载,请注明出处. 安装前的环境准备 1.由于Kafka是用Scala语言开发的,运行在JVM上,在安装之前需要先安装JDK(省略) 2.kafka依赖zookee ...

  5. Eclipse中给jar包导入JavaDoc的方法

    原文转载自:http://blog.csdn.net/mr_von/article/details/7740138 在使用Java语言开发的过程中,开发人员经常需要用到一些开源的工具包.在使用别人的j ...

  6. Spring学习03

    6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...

  7. 鸿蒙的多媒体及Menu组件及小程序的多媒体组件

    目录: js业务逻辑层 视图渲染层 css属性设置 效果图 微信小程序展示 内网穿透工具下载 我们在搭建一个小程序或者网站的时候,往往要加载很多的图片,音频和视频文件.如果都从服务器获取静态资源,这样 ...

  8. 转 6 jmeter元件的作用域与执行顺序

    6 jmeter元件的作用域与执行顺序   元件的作用域 配置元件(config elements)会影响其作用范围内的所有元件.前置处理程序(Per-processors)在其作用范围内的每一个sa ...

  9. 大数据谢列3:Hdfs的HA实现

    在之前的文章:大数据系列:一文初识Hdfs , 大数据系列2:Hdfs的读写操作 中Hdfs的组成.读写有简单的介绍. 在里面介绍Secondary NameNode和Hdfs读写的流程. 并且在文章 ...

  10. maven project builder fails when running on jdk>9

    java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.plexus.archiver.jar.JarArchi ...