UVA12103 贪心+置换
2024-09-30 12:08:09
题意:给出26个大写字母的置换B,问是否存在一个置换A,舍得A^2=B,如果存在输出Yes,否则输出No
题解:
研究一下置换A与A^2关系。
假设A=(a1 a2 a3)(b1 b2 b3 b4)
A^2=(a1 a2 a3)(b1 b2 b3 b4)(a1 a2 a3)(b1 b2 b3 b4)
不相交的循环乘法满足交换律。
A^2=(a1 a2 a3)(a1 a2 a3)(b1 b2 b3 b4)(b1 b2 b3 b4)
奇数的两个合并一定是奇数
偶数二个变两个。
所以:两个长度为n的相同循环相乘,当n为奇数结果也是一个长度为n的循环。
当n为偶数,分裂分为两个长度为n/2的循环。
对于n为奇数,可以找到两个奇数循环,使得A^2=B
因为n为偶数的循环只能是两个长度为2n的循环分裂而成的。所以对于任意偶数长度,
循环个数必须是偶数才能配对。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int vis[],cnt[];
char b[]; int main()
{
int cas;scanf("%d",&cas);
while(cas--)
{
scanf("%s",b);
memset(vis,,sizeof(vis));
memset(cnt,,sizeof(cnt));
for (int i=;i<;i++)
if (!vis[i])
{
int j=i,n=;
do{
vis[j]=;
j=b[j]-'A';
n++;
}while(j!=i);
cnt[n]++;
}
int flag=;
for (int i=;i<=;i+=)
if (cnt[i]%==) flag=;
if (flag) printf("Yes\n");
else printf("No\n");
}
}
最新文章
- git开发流程、常用命令及工具、TortoiseGit使用及常见问题
- drozer安装之夜深模拟器
- Foix_Reader_6.0|PDF阅读器
- Python 的命令行参数处理 optparse->;argparse
- AX 获得当前Grid的数据源的记录行数
- 从今天开始每天刷一题,并写在这里 分类: ACM 2015-06-16 23:52 14人阅读 评论(0) 收藏
- 概率质量函数:怀孕周期的PMF
- android R.id.转化为view
- Gartner Publishes 2014 Magic Quadrant for SIEM and Critical Capabilities for SIEM Reports
- 论深度优先(DFS)和广度优先搜索(BF)的优点及不足(更新ing)
- 项目DEMO下载
- [C/C++语言标准] ISO C99/ ISO C11/ ISO C++11/ ISO C++14 Downloads
- ORACLE时间日期格式使用总结(参考网上资料汇总)
- day 21 垃圾回收机制、标记删除及分代回收
- FPGA——流水灯(一)
- 终于明白word-break属性——break-all和break-word的区别
- 海康威视笔试(C++)
- PAT 天梯赛 是否完全二叉搜索树&#160;&#160;&#160;(30分)(二叉搜索树 数组)
- gitlab 灾备
- CentOS7使用yum安装nginx
热门文章
- CF778B(round 402 div.2 E) Bitwise Formula
- Pow挖矿流程
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- JavaScript也谈内存优化
- 洛谷P1724 东风谷早苗
- Hadoop 常用命令之 HDFS命令
- MySQL数据表查询操作
- python基础一 day9 函数升阶(2)
- css--css选择器,伪类
- Vue之组件的使用