LA 3641 Leonardo的笔记本 & UVA 11077 排列统计
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 排列统计的更多相关文章
- UVA 11077 - Find the Permutations(递推)
UVA 11077 - Find the Permutations option=com_onlinejudge&Itemid=8&page=show_problem&cate ...
- Leonardo的笔记本LA 3641——置换的乘法
题意 给出26个大写字母的置换 $B$,问是否存在一个置换 $A$,使得 $A^2=B$. 分析 首先,若A=BC,若B和C都能表示成两个相同循环的乘积,则A也能. 因为,不相交的循环的乘积满足交换律 ...
- LA 3641 (置换 循环的分解) Leonardo's Notebook
给出一个26个大写字母的置换B,是否存在A2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A2就相当于将项链旋转了两 ...
- 【LA 3641】 Leonardo's Notebook (置换群)
[题意] 给出26个大写字母组成 字符串B问是否存在一个置换A使得A^2 = B [分析] 置换前面已经说了,做了这题之后有了更深的了解. 再说说置换群. 首先是群. 置换群的元素是置换,运算时是 ...
- Uva 11077 Find the Permutations [置换群 DP]
题意: 给定$n$和$k$,问有多少排列交换$k$次能变成升序 $n \le 21$ $uva$貌似挂掉了$vjudge$上一直排队 从某个排列到$1,2,...,n$和从$1,2,...,n$到某个 ...
- LA 3644 - X-Plosives ( 也即UVA 1160)
LA看题 请点击:传送门 UVA 上也有这题 :UVA 1160 - X-Plosives 题目大意就是如果车上存在 k 个简单化合物,正好包含 k 种元素 ,那么它们将有危险,此时你应该拒绝装车. ...
- UVa 11077 (循环分解 递推) Find the Permutations
把{1, 2, 3,,, n}叫做自然排列 本题便是求有多少个n元排列P要至少经过k次交换才能变为自然排列. 首先将排列P看做置换,然后将其分解循环,对于每个长度为i的循环至少要交换i-1次才能归位. ...
- UVa 11077 Find the Permutations(置换+递推)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35431 [思路] 置换+递推 将一个排列看作一个置换,分解为k个循 ...
- UVa 11077 Find the Permutations (计数DP)
题意:给定 n 和 m,问你在 1 ~ n 的所有排列中,有多少个排列满足至少要交换 m 次才能变成 1 2 3 ... n. 析:首先,先考虑一下,某个排列,要变成 1 2 3 .. n,最少要交换 ...
随机推荐
- 性能超四倍的高性能.NET二进制序列化库
二进制序列化在.NET中有很多使用场景,如我们使用分布式缓存时,通常将缓存对象序列化为二进制数据进行缓存,在ASP.NET中,很多中间件(如认证等)也都是用了二进制序列化. 在.NET中我们通常使用S ...
- 【Java基础】数组和算法
数组和算法 查找算法 线性查找 ... 二分查找 二分查找要求数据结构是有序的. package com.parzulpan.java.ch03; /** * @Author : parzulpan ...
- 【Java】网络编程之NIO
简单记录 慕课网-解锁网络编程之NIO的前世今生 & 一站式学习Java网络编程 全面理解BIO/NIO/AIO 内容概览 文章目录 1.[了解] NIO网络编程模型 1.1.NIO简介 1. ...
- IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerp
[root@k8s-master ~]# scp /etc/sysctl.d/k8s.conf root@192.168.30.23:/etc/sysctl.d/k8s.conf@@@@@@@@@@@ ...
- 史上最全postgreSQL体系结构(转)
原文链接:https://cloud.tencent.com/developer/article/1469101 墨墨导读:本文主要从日志文件.参数文件.控制文件.数据文件.redo日志(WAL).后 ...
- HTML&CSS:构建网站不能不说的那些事儿
很高兴你能看到这个专栏!俗话说得好,相逢即是缘分,没准你和我在上一世也曾有过五百次的回眸,才得此一面.说的有点恶心了,咱还是书归正传,说说这个专栏吧. 这个专栏主要讲的是 HTML 和 CSS 的页面 ...
- IPC图像处理项目流程图
网络摄像机IPC图像处理项目流程图:
- 将汉字取模软件中的汉字放到keil5中显示
最近因为要使用STM32做毕业设计,需要用LCD显示中文,STM32开发板用的是原子的战舰STM32开发板,给的LCD显示例程里貌似没有中文显示,那么需要自己去编写中文显示程序. 软件编写对我来说并不 ...
- JVM(五)手动解析.class文件
一:不同进制之间的转换 二进制:逢2进1,数字0-1. 八进制:逢8进1,数字0-7.三位二进制表示一位八进制.三位二进制最大为111,最大为7. 十进制:逢10进1,数字0-9.四位二进制表示一位十 ...
- Jmeter-插件扩展及性能监控插件的安装
需要对http服务进行大数据量的传值测试:看看产品中的http服务,能支持传多少字符:目标值是希望能到10w+: 上次测试中,服务器总是内存满导致服务不响应,因此想增加对服务端的性能监控:查阅了smi ...