[Poj3128]Leonardo's Notebook

标签: 置换


题目链接

题意

给你一个置换\(B\),让你判断是否有一个置换\(A\)使得\(B=A^2\)。

题解

置换可以写成循环的形式,所以我们不妨来研究循环平方的特性。

对于一个奇数长度的循环$$(a_1 a_2 a_3 a_4 ...... a_{2n+1}),(a_1 a_2 a_3 a_4 ...... a_{2n+1})(a_1 a_2 a_3 a_4 ...... a_{2n+1})=(a_1 a_3 a_5 ...... a_{2n+1} a_2 a_4 ...... a_{2n})$$

平方之后仍是一个奇数长度的循环。

而偶数长度的循环平方之后则会分成两个长度相等的循环。

所以本题就很容易解决了。把置换写成循环的形式后,奇数长度的循环可以写成一个奇数长度循环的平方。对于偶数长度的循环只可能是一个偶数长度循环的平方。

我们只需要判断每一个偶数长度的循环的个数是不是偶数就行了。

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<vector>
using namespace std;
#define ll long long
#define REP(i,a,b) for(int i=(a),_end_=(b);i<=_end_;i++)
#define DREP(i,a,b) for(int i=(a),_end_=(b);i>=_end_;i--)
#define EREP(i,a) for(int i=start[(a)];i;i=e[i].next)
inline int read()
{
int sum=0,p=1;char ch=getchar();
while(!(('0'<=ch && ch<='9') || ch=='-'))ch=getchar();
if(ch=='-')p=-1,ch=getchar();
while('0'<=ch && ch<='9')sum=sum*10+ch-48,ch=getchar();
return sum*p;
} const int maxn=30; int a[maxn],cnt[maxn]; int vis[maxn];
void init()
{
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
char s[maxn];
cin>>s;
REP(i,1,26)a[i]=s[i-1]-'A'+1;
}
void doing()
{
REP(i,1,26)
{
if(vis[i])continue;
int j=a[i],sum=1;
vis[i]=1;
while(j!=i)
{
vis[j]=1;
j=a[j];
sum++;
}
cnt[sum]++;
}
int flag=1;
REP(i,1,13)
{
if(cnt[i*2] & 1)
{
flag = 0;
break;
}
}
if(flag)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
} int main()
{
int t=read();
while(t)
{
t--;
init();
doing();
}
return 0;
}

[Poj3128]Leonardo's Notebook的更多相关文章

  1. POJ 3128 Leonardo's Notebook (置换)

    Leonardo's Notebook Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2324   Accepted: 98 ...

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

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

  3. poj 3128 Leonardo's Notebook (置换群的整幂运算)

    题意:给你一个置换P,问是否存在一个置换M,使M^2=P 思路:资料参考 <置换群快速幂运算研究与探讨> https://wenku.baidu.com/view/0bff6b1c6bd9 ...

  4. POJ 3128 Leonardo's Notebook [置换群]

    传送门 题意:26个大写字母的置换$B$,是否存在置换$A$满足$A^2=B$ $A^2$,就是在循环中一下子走两步 容易发现,长度$n$为奇数的循环走两步还是$n$次回到原点 $n$为偶数的话是$\ ...

  5. Leonardo's Notebook UVALive - 3641(置换)

    题意: 给出26个大写字母的置换B,问是否存在一个置换A,使得A2 = B 解析: 两个长度为n的相同循环相乘,1.当n为奇数时结果也是一个长度为n的循环:2. 当n为偶数时分裂为两个长度为n/2 ( ...

  6. LA3641 Leonardo's Notebook

    题意 PDF 分析 给出一个26个大写字母的置换B,是否存在A^2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A^ ...

  7. UVaLive 3641 Leonardo's Notebook (置换)

    题意:给定一个置换 B 问是否则存在一个置换 A ,使用 A^2 = B. 析:可以自己画一画,假设 A = (a1, a2, a3)(b1, b2, b3, b4),那么 A^2 = (a1, a2 ...

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

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

  9. poj 3128 Leonardo's Notebook——思路(置换)

    题目:http://poj.org/problem?id=3128 从环的角度考虑. 原来有奇数个点的环,现在点数不变: 原来有偶数个点的环(设有 k 个点),现在变成两个大小为 k/2 的环. 所以 ...

随机推荐

  1. Shell常用命令整理

    http://blog.csdn.net/junmail/article/details/4602745 1.   ls: 类似于dos下的dir命令 ls最常用的参数有三个: -a -l -F. l ...

  2. ap web

    apapplication端吧    应用程序端   也C-S架构Cweb网页端   般封装httpservletrequest和httpservletresponse对象处理些操作  b-s架构

  3. 关于Set<Long>Map<Long,String>的一些小注意事项 自动转换类型

  4. UWP: 实现 UWP 应用自启动

    在上一篇文章中,我们实现了使用命令行来启动 UWP 应用,在这一篇文章中,我们会实现 UWP 应用自启用的实现,也即开机后或用户登陆后,应用自己启动.这些特性原来都是 Win32 程序所具备的,UWP ...

  5. linux 巨页使用测试

    这里记录测试巨页的mmap使用,测试代码和<linux 巨页使用测试以及勘误1>类似. 跟踪脚本如下: probe kernel.function("hugetlb_reserv ...

  6. php中urldecode()和urlencode()起什么作用

    urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%.urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原 ...

  7. [python] 2、python使用pyaudio进行录音,及其在python虚拟环境virtualenv中安装遇到的问题

    1.pyaudio安装大背景 最近在做智能音箱,需要编写声音拾取代码,我先是百度两篇比较常见的用python进行录音的操作的文章: python写一个录音小程序:http://blog.csdn.ne ...

  8. unity getcomponentsinchildren 翻船

    今天使用GetComponentsInChildren, 老司机翻船.因为一直以来我使用这个函数,下意识的从来所有的相同component都是放在子节点下,本身节点肯定不会放一个相同的componen ...

  9. C#基础(三)--运算符及条件控制语句

    上一章我们了解了C#的一些数据基本类型.如何定义使用变量及类型之间的相互转换.可能大家会发现程序只能按照我们的要求从上向下这样顺序一条一条的执行. 那么程序能按照我们的要求,当某个条件成立的时候才执行 ...

  10. 使用open-falcon监控Nginx

    一.介绍 前段时间部署试用了open-falcon v0.2,官方文档很详细,难度也不是很大.监控Nginx也参考了文档推荐的方式,文档地址:http://book.open-falcon.org/z ...