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 ...
随机推荐
- IntelliJ IDEA 2018 for Mac专业使用技巧
IntelliJ IDEA 2018 for Mac是一个综合性的Java编程环境,被许多开发人员和行业专家誉为市场上最好的IDE,它提供了一系列最实用的的工具组合:智能编码辅助和自动控制,支持J2E ...
- Python 课件笔记
Python 3.0 课件笔记 我们需要做的就是认真听取每一堂课,私下阅读老师博客笔记进行再复习,综合理解后写下自己的笔记,加深印象! Day1 - Python基础1 介绍.基本语法.流程控制
- 白盒测试笔记之:Junit 单元测试以及测试覆盖率
单元测试: 单元测试是从代码层面验证代码的正确性. 一般考虑接口中的数据结构是否正确,变量的临界条件,如空字符串,空集合等. Junit入门 参考: Junit 入门教程: https://ww ...
- elasticsearch的备份和恢复(转)
vim /etc/elasticsearch/elasticsearch.yml path.repo: ["/data/backups/es_backup"] #备份目录,根据自己 ...
- 为什么 ConcurrentHashMap 的读操作不需要加锁?
现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了.最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默.所以忍不住分享一下给大家 ConcurrentH ...
- CF39H 【Multiplication Table】
这题可以枚举出每个i,j 位置的数>需要用到进制转换 int zh(int x){ long long sum=0,i=0; while(x){ sum=sum+((x%n)*pow(10,i) ...
- [LGP4859,...] 一类奇怪的容斥套DP
漫山遍野都是fake的光影. 题目 [LGP4859] 已经没有什么好害怕的了 给定两个长度为n的数组a和b,将a中元素与b中元素配对,求满足ai>bj的配对(i,j)个数减去满足ai<b ...
- # ACM奇淫技巧
目录 ACM奇淫技巧 差分操作 坐标旋转 ACM 卡常优化 vsc代码块(头文件模板) 读入输出优化 逗号表达式 内联函数inline 寄存器变量register 条件判断加减代替取模 自增运算符优化 ...
- CentOS7通过YUM安装MySQL5.6
检查系统中的 MySQL,并删除现有的 Mysql 软件包. $ rpm -qa | grep mysql 这里如果没有返回任何东西证明没有安装任何 MySQL 相关的应用.如下图: 由于 cento ...
- 04: redis集群
1.1 主从同步 1.CPA原理 1. CPA原理是分布式存储理论的基石: C(一致性): A(可用性): P(分区容忍性); 2. 当主从网络无法连通时,修改操作无法同步到节点,所以“一致性” ...