UVALive - 3510 Pixel Shuffle (置换)
有一个n*n的图像和7种置换,以及一个置换序列,求将这个序列重复做几次能得到原图像。
将这些置换序列乘起来可得到一个最终置换,这个置换所有循环节的长度的lcm即为答案。
注意置换是从右往左进行的,开始没仔细读题,debug到崩溃~~
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
const int N=+;
typedef vector<int> Per;
Per operator*(const Per& a,const Per& b) {
Per c(a.size());
for(int i=; i<c.size(); ++i)c[i]=b[a[i]];
return c;
}
Per inv(const Per& a) {
Per c(a.size());
for(int i=; i<c.size(); ++i)c[a[i]]=i;
return c;
}
Per a[][];
int n,k,ka;
int f(int i,int j) {return i*n+j;}
string line;
int vis[N*N];
ll lcm(ll a,ll b) {return a/__gcd(a,b)*b;}
int main() {
int T;
for(scanf("%d",&T); T--;) {
!ka?++ka:puts("");
scanf("%d ",&n);
for(int i=; i<; ++i)a[i][].resize(n*n);
for(int i=; i<n; ++i)
for(int j=; j<n; ++j) {
a[][][f(i,j)]=f(i,j);
a[][][f(i,j)]=f(n--j,i);
a[][][f(i,j)]=f(i,n--j);
a[][][f(i,j)]=i<n/?f(i,j):f(i,n--j);
a[][][f(i,j)]=i<n/?f(i,j):f(n--i+n/,j);
a[][][f(i,j)]=i&?f(i/+n/,j):f(i/,j);
a[][][f(i,j)]=i&?f(i-(j&^),j/+n/):f(i+(j&),j/);
}
for(int i=; i<; ++i)a[i][]=inv(a[i][]);
swap(a[][],a[][]);
Per p=a[][];
getline(cin,line);
stringstream ss(line);
string s;
while(ss>>s) {
int t=;
if(s.back()=='-')t=,s.pop_back();
if(s=="id")p=a[][t]*p;
else if(s=="rot")p=a[][t]*p;
else if(s=="sym")p=a[][t]*p;
else if(s=="bhsym")p=a[][t]*p;
else if(s=="bvsym")p=a[][t]*p;
else if(s=="div")p=a[][t]*p;
else if(s=="mix")p=a[][t]*p;
}
memset(vis,,sizeof vis);
ll ans=;
for(int i=; i<p.size(); ++i)if(!vis[i]) {
ll cnt=;
vis[i]=;
for(int j=p[i]; j!=i; vis[j]=,j=p[j])++cnt;
ans=lcm(ans,cnt);
}
printf("%lld\n",ans);
}
return ;
}
UVALive - 3510 Pixel Shuffle (置换)的更多相关文章
- UVA 1156 - Pixel Shuffle(模拟+置换)
UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该 ...
- LA 3510 (置换 循环分解) Pixel Shuffle
思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换. 用O(n2k)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换) 还是先把A分解循环,m则等于所有循环节长 ...
- 2020牛客暑期多校训练营 第二场 J Just Shuffle 置换 群论
LINK:Just Shuffle 比较怂群论 因为没怎么学过 置换也是刚理解. 这道题是 已知一个置换\(A\)求一个置换P 两个置换的关键为\(P^k=A\) 且k是一个大质数. 做法是李指导教我 ...
- LA3510 Pixel Shuffle
题意 PDF 分析 思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换. 用\(O(n^2k)\)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换) 还是先把A ...
- Learning to Promote Saliency Detectors
Learning to Promote Saliency Detectors 原本放在了思否上, 但是公式支持不好, csdn广告太多, 在博客园/掘金上发一下 https://github.com/ ...
- 上采样 及 Sub-pixel Convolution (子像素卷积)
参考:https://blog.csdn.net/leviopku/article/details/84975282 参考:https://blog.csdn.net/g11d111/article/ ...
- Speech Super Resolution Generative Adversarial Network
博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/10874993.html 论文作者:Sefik Emre Eskimez , Kazuhito K ...
- Leonardo's Notebook UVALive - 3641(置换)
题意: 给出26个大写字母的置换B,问是否存在一个置换A,使得A2 = B 解析: 两个长度为n的相同循环相乘,1.当n为奇数时结果也是一个长度为n的循环:2. 当n为偶数时分裂为两个长度为n/2 ( ...
- UVaLive 3641 Leonardo's Notebook (置换)
题意:给定一个置换 B 问是否则存在一个置换 A ,使用 A^2 = B. 析:可以自己画一画,假设 A = (a1, a2, a3)(b1, b2, b3, b4),那么 A^2 = (a1, a2 ...
随机推荐
- Mac上解决Chrome浏览器跨域问题
最近做前端开发总是遇到一个很奇怪的现象,同一个AJAX请求,在Chrome里调试的时候就会提示跨域,但是在手机模拟器或者真机上调试的时候就不会,于是百度了一下,发现是Chrome的安全策略导致的,需要 ...
- CTF—攻防练习之HTTP—命令执行漏洞
渗透环境: 主机:192.168.32.152 靶机:192.168.32.1 命令执行漏洞 命令执行漏洞概念:当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数.如PHP中 ...
- Python学习之认知(一)
第二章(一) 2.1 python介绍 2.1.1 python是一种什么样的语言 编程语⾔主要从以下几个⻆度为进行分类,编译型和解释型.静态语言和动态语⾔.强类型定义语言和弱类型定义语言. 编译 ...
- SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession
可以说每个MyBatis都是以一个SqlSessionFactory实例为中心的.SqlSessionFactory实例可以通过SqlSessionFactoryBuilder来构建.一是可以通过XM ...
- ssh隧道详解与案例利用讲解
原文阅读:https://www.52stu.org/?p=206 你是否有过自己身处内网,却想整个远控上线?你是否有过身处目标内网,却想把目标的内网的Linux的ssh转发出来?你是否想过穿透多层网 ...
- mysql——创建表、修改表、删除表(概念详细讲解)
一.创建一个数据表 create table 表名 ( 列名1 数据类型1 [完整性约束条件], 列名2 数据类型2 [完整性约束条件], 列名3 数据类型3 [完整性约束条件], 列名4 数据类型4 ...
- Laravel策略(Policy)示例
场景:当前用户创建的订单,只能当前用户自己看,可以通过授权策略类(Policy)来实现 1.php artisan make:policy OrderPolicy 成功后,默认只有一个构造方法.因为涉 ...
- PTA(Basic Level)1024.科学计数法
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...
- MySQL教程详解之存储引擎介绍及默认引擎设置
什么是存储引擎? 与其他数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不同的是,MySQL有一个被称为“Pluggable Storage Engine Architectu ...
- 【经典问题】maximum subset sum of vectors
AtCoder Beginner Contest 139 Task F Engines 题目大意 给定 $n$ 个二维向量,从中选出若干个,使得它们的和的模最大. 分析 这是一个经典问题,还有一种提法 ...