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中同一长度为偶数的环,他们的个数必须是偶数个。

char s[30];
int T, vis[N], cnt[30];
int main() {
scanf("%d", &T);
while(T--){
scanf("%s", s);
memset(cnt, 0, sizeof cnt);
memset(vis, 0, sizeof vis);
for (int i = 0; i < 26;i++){
if(!vis[i]){
int j = i, n = 0;
do{
vis[j] = 1;
j = s[j] - 'A';
n++;
} while (j != i);
cnt[n]++;
}
}
int flag = true;
for (int i = 2; i <= 26;i+= 2){
if(cnt[i] % 2 == 1)
flag = false;
}
puts(flag ? "Yes" : "No");
}
return 0;
}

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 个元素单独构成一个环,它并不对交换操作造成贡献

ull f[N][N];

int main() {
memset(f, 0, sizeof f);
f[1][0] = 1;
for (int i = 2; i <= 21;i++){
for (int j = 0; j < i;j++){
f[i][j] = f[i - 1][j];
if(j > 0)
f[i][j] += f[i - 1][j - 1] * (i - 1);
}
}
int n, k;
while(scanf("%d%d",&n,&k) == 2 && n)
printf("%llu\n", f[n][k]);
return 0;
}

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. #2使用html+css+js制作网站教程 测试

    #2使用html+css+js制作网站教程 测试 本系列链接 1 测试 1.1 运行 1.2 审查 1.3 审查技巧 1.4 其他 引言: 编写完代码后就要上机测试代码,获得用户体验,筛选bug 笔者 ...

  2. NIO基础操作

    原文链接http://zhhll.icu/2020/05/18/java%E5%9F%BA%E7%A1%80/IO/NIO%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/ N ...

  3. 四:WEB源码扩展

    前言:WEB源码在安全测试中是非常重要的信息来源,可以用来进行代码审计漏洞也可以用来做信息突破口,其中WEB源码有很多技术需要简明分析,获取某ASP源码后就可以采用默认数据库下载为突破,获取某其他脚本 ...

  4. 【EXP】比较大的dmp文件导入的时候可以将界面关掉

    有一个需求,将一个dmp文件导入到数据库中,但是这个crt的回话有timeout,3分钟,所以一到三分钟就掉线,导入就失败了,这让人很头疼,关闭界面,imp也就终止了 最后想到了几招,分享一下: 1. ...

  5. pandas 读写excel 操作(按索引和关键字读取行和列,写入csv文件)

    pandas读写excel和csv操作总结 按索引读取某一列的值 按关键字读取某一列的值 按关键字查询某一行的值 保存成字典并写入新的csv import pandas as pd grades=pd ...

  6. oracle rac与单实例DG切换

    1.主库查看状态(RAC库) SQL> select database_role,switchover_status from v$database; DATABASE_ROLE SWITCHO ...

  7. ubuntu20.04并添加桌面快捷方式,以安装火狐可浏览器开发版(水狐)为例

    @参考原文 1. 下载linux版源文件 从火狐官网下载linux版的水狐源文件压缩包,@火狐浏览器开发版(水狐)下载地址. 2. 解压下载源文件 将下载的"tar.bz2"文件解 ...

  8. 浅谈JavaScript代码性能优化2

    一.减少判断层级 从下图代码中可以明显看出,同样的效果判断层级的减少可以优化性能 二.减少作用域链查找层级 简单解释下,下图中第一个运行foo函数,bar函数内打印name,bar作用域内没有name ...

  9. linux opt, usr文件夹说明

    linux下各文件夹介绍: https://www.pathname.com/fhs/pub/fhs-2.3.html /usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为 ...

  10. k8s-jenkins持续发布tomcat项目

    k8s-jenkins持续发布tomcat项目 一.需求 这个实验前期后后搞了很久(公司经常插一些别的事过来,然后自己比较懒,再加上自己知识不够扎实).二进制部署完k8s集群就开始做jenkins持续 ...