UVALive 3641 Leonardo's Notebook(置换)
来源:互联网 发布:sql delete 编辑:程序博客网 时间:2024/06/05 18:19
题意:判断置换B能够表示成某置换的平方的形式
解法:
1.将置换循环分解。可以发现当A是偶数个元素的循环(2*n)时,A^2变成大小为n的两个循环的乘积;当A时奇数个元素的循环(2*n+1)时,A^2变成大小为2*n的新循环
因此将B分解成若干循环后:
偶数个元素的循环个数是偶数<=> B能够表示成某置换的平方的形式
#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#define MP make_pair#define ll long longusing namespace std;int n;char ch[30];bool vis[30];int cnt[30],f[30];int tmp;void dfs(int x,int y){ if(vis[y]) return; if(vis[y]&&y==x) return; vis[y]=1,tmp++; dfs(x,f[y]);}int main(){ //freopen("a.txt","r",stdin); scanf("%d",&n); while(n--){ scanf("%s",ch+1); memset(vis,0,sizeof(vis)); memset(cnt,0,sizeof(cnt)); bool flag=true; for(int i=1;i<=26;i++){ f[i]=ch[i]-'A'+1; } for(int i=1;i<=26;i++) { tmp=0; dfs(i,i); if(tmp) cnt[tmp]++; } for(int i=2;i<=26;i+=2){ if(cnt[i]%2!=0) { flag=false; break; } } if(flag) printf("Yes\n"); else printf("No\n"); } return 0;}
0 0
- UVALive 3641 Leonardo's Notebook(置换)
- UVALive 3641 Leonardo's Notebook (置换)
- 置换(Leonardo's Notebook,LA 3641)
- LA 3641 - Leonardo's Notebook(置换群)
- LA 3641 Leonardo's Notebook / 置换
- [POJ3128]Leonardo's Notebook(置换群)
- poj 3128 Leonardo's Notebook (置换)
- UVA 12103/poj 3128/hdu 1975/UVALive 3641 Leonardo's Notebook 置换
- poj 3128 Leonardo's Notebook(置换的幂)
- POJ 题目3128Leonardo's Notebook(置换的平方)
- POJ 3128 Leonardo's Notebook(置换的平方)
- POJ2128、LA3641【Leonardo's Notebook】【置换群】
- uva 12103 - Leonardo's Notebook(置换)
- poj 3128 Leonardo's Notebook (置换群)
- POJ3128 Leonardo's Notebook【置换群】
- POJ 3128 Leonardo's Notebook(置换)
- UVALA 3641 Leonardo's Notebook
- [ACM] poj 3128 Leonardo's Notebook (置换群,循环节)
- 交换两个变量值的方法
- Leetcode: Maximum Depth of Binary Tree
- 黑马程序员——c语言基础:一维数组
- 乐乐音乐播放器(三) 第一次引导页面
- cocos2dx 背包界面的实现
- UVALive 3641 Leonardo's Notebook(置换)
- 黑马程序员:iOS基础——个人笔记(七)
- Android 获取本地文件(遍历本地文件)
- 黑马程序员(五)集合类
- 【MITM】登陆会话劫持
- Leetcode: Minimum Depth of Binary Tree
- TabHost组件的功能用法
- 166Fraction to Recurring Decimal
- oschina上项目删除后,把本地项目上传