【LA 3641】 Leonardo's Notebook (置换群)
【题意】
给出26个大写字母组成 字符串B问是否存在一个置换A使得A^2 = B
【分析】
置换前面已经说了,做了这题之后有了更深的了解。
再说说置换群。
首先是群。
置换群的元素是置换,运算时是置换的连接。
前面已经说了,每个置换都可以写成互不相交的循环的乘积。
然后分析一下这题。
假设A置换是(a1,a2,a3)(b1,b2,b3,b4) 【这里用循环表示
那么A*A=(a1,a2,a3)(b1,b2,b3,b4)(a1,a2,a3)(b1,b2,b3,b4)
不相交的循环满足交换律,so
A*A=(a1,a2,a3)(a1,a2,a3)(b1,b2,b3,b4)(b1,b2,b3,b4)
满足结合律 A*A=( (a1,a2,a3)(a1,a2,a3)) * ((b1,b2,b3,b4)(b1,b2,b3,b4))
(a1,a2,a3)(a1,a2,a3)=(a1,a3,a2)
(b1,b2,b3,b4)(b1,b2,b3,b4)=(b1,b3)(b2,b4)
分析到这里可以考虑B了,先把B分成若干个不相交的循环,对于长度为n奇循环来说,他可以是两个长度为n的循环乘出来的,也可能是两个长度为2n的循环分裂成的。
而对于长度为n偶循环来说,他只能是两个长度为2n的循环分裂成的。所以偶循环必须要长度相等的两两配对。
也就是说如果有奇数个长度相同的偶循环,就输出NO,否则一定可以找到一个合法的A。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 30 int a[Maxn],ans[Maxn];
bool vis[Maxn]; char s[Maxn]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
for(int i=;i<=;i++) a[i+]=s[i]-'A'+;
memset(vis,,sizeof(vis));
memset(ans,,sizeof(ans));
for(int i=;i<=;i++) if(!vis[i])
{
int cnt=,x=i;
while(vis[x]==)
{
cnt++;
vis[x]=;
x=a[x];
}
ans[cnt]++;
}
bool ok=;
for(int i=;i<=;i+=)
{
if(ans[i]%==) ok=;
}
if(ok) printf("Yes\n");
else printf("No\n");
}
return ;
}
好机智哦,这样一看也不是很难啦。。
代码也很简单。。
2017-01-11 16:49:20
【LA 3641】 Leonardo's Notebook (置换群)的更多相关文章
- LA 3641 Leonardo的笔记本 & UVA 11077 排列统计
LA 3641 Leonardo的笔记本 题目 给出26个大写字母的置换B,问是否存在要给置换A,使得 \(A^2 = B\) 分析 将A分解为几个循环,可以观察经过乘积运算得到\(A^2\)后,循环 ...
- poj 3128 Leonardo's Notebook (置换群的整幂运算)
题意:给你一个置换P,问是否存在一个置换M,使M^2=P 思路:资料参考 <置换群快速幂运算研究与探讨> https://wenku.baidu.com/view/0bff6b1c6bd9 ...
- POJ 3128 Leonardo's Notebook [置换群]
传送门 题意:26个大写字母的置换$B$,是否存在置换$A$满足$A^2=B$ $A^2$,就是在循环中一下子走两步 容易发现,长度$n$为奇数的循环走两步还是$n$次回到原点 $n$为偶数的话是$\ ...
- UVaLive 3641 Leonardo's Notebook (置换)
题意:给定一个置换 B 问是否则存在一个置换 A ,使用 A^2 = B. 析:可以自己画一画,假设 A = (a1, a2, a3)(b1, b2, b3, b4),那么 A^2 = (a1, a2 ...
- hrbust oj 1536 Leonardo's Notebook 置换群问题
题目大意: 给出一个A~Z的置换G,问能否找到一个A~Z的置换G' 能够用来表示为 G = G'*G' 由定理: 任意一个长为 L 的置换的k次幂,都会把自己的每一个循环节分裂成gcd(L, K)份, ...
- [Poj3128]Leonardo's Notebook
[Poj3128]Leonardo's Notebook 标签: 置换 题目链接 题意 给你一个置换\(B\),让你判断是否有一个置换\(A\)使得\(B=A^2\). 题解 置换可以写成循环的形式, ...
- POJ 3128 Leonardo's Notebook (置换)
Leonardo's Notebook Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2324 Accepted: 98 ...
- LA 3641 (置换 循环的分解) Leonardo's Notebook
给出一个26个大写字母的置换B,是否存在A2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A2就相当于将项链旋转了两 ...
- Leonardo's Notebook UVALive - 3641(置换)
题意: 给出26个大写字母的置换B,问是否存在一个置换A,使得A2 = B 解析: 两个长度为n的相同循环相乘,1.当n为奇数时结果也是一个长度为n的循环:2. 当n为偶数时分裂为两个长度为n/2 ( ...
随机推荐
- uoj308 【UNR #2】UOJ拯救计划
传送门:http://uoj.ac/problem/308 [题解] 考虑枚举用了$i$所学校,那么贡献为${k \choose i} * cnt * i!$ 意思是从$k$所选$i$所出来染色,$c ...
- 【CodeForces】601 D. Acyclic Organic Compounds
[题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...
- 跨域iframe高度计算
一.同域获取iframe内容 这里有两个细节: 1. 取iframe内的文档对象,标准浏览器使用contentDocument属性,IE低版本(IE6,7,8)使用document属性. 2. cal ...
- Python模块学习 - openpyxl
openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...
- 【Android framework】AndroidManagerService初始化流程
源码基于Android 4.4. system_server的初始化 system_server受AMS管理,负责启动framework-res.apk和SettingsProvider.apk. ...
- PhysX SDK
PhysX SDK https://developer.nvidia.com/physx-sdk NVIDIA PhysX SDK Downloads http://www.nvidia.cn/obj ...
- python 判断文件的创建时间和当前时间的比较
import os import time import datetime filePath=r"C:\pyweibo\cookies5673210223" ctime=os.pa ...
- SSH认证原理和批量分发管理
SSH密码认证原理 几点说明: 1.服务端/etc/ssh目录下有三对公钥私钥: [root@m01 ssh]# ls moduli ssh_config sshd_config ssh_host_d ...
- C++内存管理(转)
C++内存管理比较好的文章,参考链接如下: C++内存管理
- jmeter压力测试案例实战
1. 测试目标地址:http://www.cnblogs.com/ 2. 1秒内有100个用户同时访问,看性能如何 3. 步骤 线程组.http请求.查看结果树.聚合报告 添加http请求如下: ...
