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 ...
随机推荐
- Java 多线程爬虫及分布式爬虫架构
这是 Java 爬虫系列博文的第五篇,在上一篇 Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器 中,我们简单的聊反爬虫策略和反反爬虫方法,主要针对的是 IP 被封及其对应办法.前面几篇文章我们把 ...
- SSH代理
参考: http://www.dkys.org/archives/1111.html SSH的-L与-D代理 SSH有三种代理参数-L,-D,-R.-R代理不是本次重点,有兴趣的读者可以自行查阅man ...
- Centos 7 下Gitlab 自启动设置
禁止 Gitlab 开机自启动: systemctl disable gitlab-runsvdir.service 启用 Gitlab 开机自启动: systemctl enable gitlab- ...
- WSL升级到wsl2并使用strace
安装wsl的方法,网上很多,一般都ok.这里主要提几个问题: 1.配置securecrt来支持ssh登录. 2.使用strace. 3.使用docker. 由于wsl不支持strace,一直盼着能升级 ...
- 【面试向】hihoCoder 1994 树与落叶
题目链接 Implementation int n, q; scan(n,q); vi p(n + 1); vi nson(n + 1); up (i, 1, n) { scan(p[i]); nso ...
- MVVM 和 VUE三要素:响应式、模板引擎、渲染
MVVM 和 VUE三要素:响应式.模板引擎.渲染:https://blog.csdn.net/weixin_37644989/article/details/94409430
- 第k小团(Bitset+bfs)牛客第二场 -- Kth Minimum Clique
题意: 给你n个点的权值和连边的信息,问你第k小团的值是多少. 思路: 用bitset存信息,暴力跑一下就行了,因为满足树形结构,所以bfs+优先队列就ok了,其中记录下最后进入的点(以免重复跑). ...
- Memcached安装 常用指令
Memcached 源码安装 # 安装依赖yum install -y gcc gcc-c++ automake autoconf make cmake libevent-devel.x86_64# ...
- windows下使用zookeeper
windows下dos窗口操作:https://blog.csdn.net/a632189007/article/details/78085858
- golang(2):基本数据类型和操作符
1). 文件名 & 关键字 & 标识符 . 所有go源码都以 .go 结尾 . 标识符以字母或下划线开头,大小写敏感 . _ 是特殊标识符,用来忽略结果 . 保留关键字 golang ...