POJ3128 Leonardo's Notebook【置换群】

2024-06-15 04:48

本文主要是介绍POJ3128 Leonardo's Notebook【置换群】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:

http://poj.org/problem?id=3128


题目大意:

给你一行共 26 个字母,代表一个置换。问:这个置换能否为某个置换平方的结果。


解题思路:

这道题可参考《置换群快速幂运算研究与探讨》,里边有详解。这里放上结论。

结论一: 一个长度为 l 的循环 T,l 是 k 的倍数,则 T^k 是 k 个循环的乘积,每个

循环分别是循环 T 中下标 i mod k=0,1,2… 的元素按顺序的连接。 
结论二:一个长度为 l 的循环 T,gcd(l,k)=1,则 T^k 是一个循环,与循环 T 不一

相同。

结论三:一个长度为 l 的循环 T,T^k 是 gcd(l,k)个循环的乘积,每个循环分别是循

 T 中下标 i mod gcd(l,k)=0,1,2… 的元素的连接。 

这倒题中,应用上边的结论来判断这个置换是否为某个置换平方的结果。

一个置换平方可得到:循环节为奇数的置换的平方仍为奇数项的置换,循环节为偶数

的置换的平方分裂成了两个循环节相同的置换。

那么当前置换是由什么置换而来的:

对于奇数项的置换,有可能是由奇数项的置换平方得到的,也有可能是有偶数项的置

换平方得到的。对于偶数项的置换,它一定是原始置换为偶数项的置换分裂得到的。

而且当前置换中偶数项的置换一定成对出现。

那么问题就变为了:对于偶数项的置换,是否成对出现。

那么,我们现在查找 26 个字母的所有置换,计算出每个置换的循环节长度。统计循

环节长度的个数。遍历查找偶数项的置换数目,如果出现奇数,则输出"No",否则

输出"Yes"。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;char s[33];
bool vis[33];
int ss[33],Cnt[33];int main()
{int T;scanf("%d",&T);while(T--){memset(s,0,sizeof(s));memset(vis,false,sizeof(vis));memset(Cnt,0,sizeof(Cnt));scanf("%s",s);for(int i = 0; i < 26; ++i)ss[i] = s[i] - 'A';int flag = 1;for(int i = 0; i < 26; ++i){if(vis[i] == 0){vis[i] = 1;int temp = ss[i];int num = 1;while(temp != i){vis[temp] = 1;temp = ss[temp];num++;}Cnt[num]++;}}for(int i = 2; i < 26; i+=2)if(Cnt[i]%2){flag = 0;break;}if(flag)printf("Yes\n");elseprintf("No\n");}return 0;
}


这篇关于POJ3128 Leonardo's Notebook【置换群】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062465

相关文章

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【Jupyter Notebook】汉化

1.打开:Anaconda Prompt 2.输入:"activate Zhui01"(注意:Zhui01是刚创建的环境名字) activate Zhui01 3.输入:"pip install jupyterlab-language-pack-zh-CN" pip install jupyterlab-language-pack-zh-CN 4.打开:Jupyter Noteb

[轻笔记] jupyter notebook 指定conda虚拟环境

安装插件 conda install nb_conda 进入conda env conda activate ${env_name}conda install ipykernelconda deactivate #3. 运行jupyter notebook conda activate # 需要先进入conda环境,非常重要jupyter notebook 会发现,在ju

jupyter notebook - python23 并存使用

在终端输入 $python2 -m pip install ipykernel$python2 -m ipykernel install --user$python3 -m pip install ipykernel$python3 -m ipykernel install --user ---------------------- Kernels for Python 2 and 3

【Jupyter】 Notebook 中的 IPython 魔法:12个必知实用技巧

Jupyter Notebook 作为一个强大的交互式计算环境,结合 IPython 的功能,为数据科学家和程序员提供了丰富的工具。本文将介绍12个在 Jupyter Notebook 中使用 IPython 的实用技巧 1. 清除输出:使用 clear_output() from IPython.display import clear_output# 执行一些操作print("This

【Anaconda】修改jupyter notebook默认打开的工作目录、jupyter notebook快捷键

jupyter notebook快捷键 针对单元格的颜色蓝色命令行模式绿色编辑模式两种模式的切换编辑模式切换到命令行模式 >>> esc键命令行模式切换到编辑模式 >>> 鼠标左键或者直接按enter键1.标题的书写方式1:1.esc进入命令行模式2.按m键3.写内容4.运行单元格即可方式2:1.编辑模式下直接写文本内容2.按esc键进入命令行模式3.再按数字键选择几级标题4.运行单元格即可

[转载]如何向IPython Notebook中导入.py文件

相关文章链接 如何向IPython Notebook中导入.py文件 如何将 ipynb 发布到 blog 中(html, markdown格式) Introducing IPython Notebook Beginner’s IPython Notebook Tutorial Example notebook showing how to do statistics

[转载]jupyter notebook中创建tensorflow的kernel

我在conda下创建了tensorflow的env,然而在jupyter notebook中却无法选择此kernel,历经google多方搜索,解决方法如下。 首先在conda下激活env activate tensorflowenv 然后安装ipykernel pip install ipykernel 最后将此kernel链接到jupyter notebook中 pyt

jupter_notebook简单介绍以及安装使用

目录 jupyter简单介绍: Jupyter: Jupyter的主要特点包括: 1. 交互式编程: 2. 文档和代码的整合: 3. 易于分享和协作: 4. 丰富的扩展性: 5. 社区支持: 6. 支持多种内核: 7. 集成开发环境(IDE)特性: 8. 版本控制: jupyter notebook的打开: 安装jupyter 无法安装 jupyter与pycha

百度 AI Studio 脚本任务篇,它不同于notebook任务是支持免费的, 脚本任务是需要算力卡的,更好的算力 支持四张显卡,

aistudio 脚本任务是需要算力卡的,是收费的一个项目,估计是运行效率更高,支持4张显卡,同时计算。 # -*- coding: utf-8 -*- """ 空白模板 """ ######  欢迎使用脚本任务,首先让我们熟悉脚本任务的一些使用规则  ###### # 详细教程请在AI Studio文档(https://ai.baidu.com/ai-doc/AISTUDIO/Ik3e3g4l