题意

PDF

分析

思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换。

用\(O(n^2k)\)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换)

还是先把A分解循环,m则等于所有循环节长度的最小公倍数。

代码

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
rg T data=0,w=1;rg char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') w=-1;ch=getchar();}
while(isdigit(ch)) data=data*10+ch-'0',ch=getchar();
return data*w;
}
template<class T>il T read(rg T&x) {return x=read<T>();}
typedef long long ll;
using namespace std; int gcd(int a,int b) {return b?gcd(b,a%b):a;}
int lcm(int a,int b) {return a/gcd(a,b)*b;}
#define ID(i,j) ((i)*n+(j))
int newpos(int n,int i,int j,co char*op){
if(op[0]=='r') return ID(n-1-j,i); // rot
if(op[0]=='s') return ID(i,n-1-j); // sym
if(op[0]=='b'&&op[1]=='h') // bhsym
return i<n/2?ID(i,j):ID(i,n-1-j);
if(op[0]=='b'&&op[1]=='v') // bvsym
return i<n/2?ID(i,j):ID(n/2+n-i-1,j);
if(op[0]=='d')
return i%2==0?ID(i/2,j):ID(n/2+i/2,j);
if(op[0]=='m'){
int k=i/2;
if(j<n/2)
return i%2==0?ID(2*k,2*j):ID(2*k,2*j+1);
else
return i%2==0?ID(2*k+1,2*(j-n/2)):ID(2*k+1,2*(j-n/2)+1);
}
return assert(op[0]=='i'),ID(i,j);
} co int N=1024;
int orig[N*N];
void apply(int*image,int n,co char*op){
bool inv=op[strlen(op)-1]=='-';
copy(image,image+n*n,orig);
for(int i=0;i<n;++i)for(int j=0;j<n;++j){
int p=ID(i,j),p2=newpos(n,i,j,op);
if(!inv) image[p2]=orig[p];
else image[p]=orig[p2];
}
} int vis[N*N];
int solve(int*p,int n){
fill(vis,vis+n,0);
int ans=1;
for(int i=0,j,len;i<n;++i)if(!vis[i]){
j=i,len=0;
do vis[j]=1,j=p[j],++len;
while(j!=i);
ans=lcm(ans,len);
}
return ans;
} int cur[N*N];
int main(){
// freopen(".in","r",stdin),freopen(".out","w",stdout);
int T,n,n2;
read(T),read(n);
for(;T--;n=n2){
for(int i=0;i<n*n;++i) cur[i]=i;
vector<string> ops;
for(int i=0;;++i){
static char op[10];
if(scanf("%s",op)==EOF) break;
if(isdigit(op[0])) {sscanf(op,"%d",&n2);break;}
ops.push_back(op);
}
for(int i=ops.size()-1;i>=0;--i)
apply(cur,n,ops[i].c_str());
printf("%d\n",solve(cur,n*n));
if(T) puts("");
}
return 0;
}

LA3510 Pixel Shuffle的更多相关文章

  1. UVA 1156 - Pixel Shuffle(模拟+置换)

    UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该 ...

  2. LA 3510 (置换 循环分解) Pixel Shuffle

    思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换. 用O(n2k)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换) 还是先把A分解循环,m则等于所有循环节长 ...

  3. UVALive - 3510 Pixel Shuffle (置换)

    题目链接 有一个n*n的图像和7种置换,以及一个置换序列,求将这个序列重复做几次能得到原图像. 将这些置换序列乘起来可得到一个最终置换,这个置换所有循环节的长度的lcm即为答案. 注意置换是从右往左进 ...

  4. Learning to Promote Saliency Detectors

    Learning to Promote Saliency Detectors 原本放在了思否上, 但是公式支持不好, csdn广告太多, 在博客园/掘金上发一下 https://github.com/ ...

  5. 上采样 及 Sub-pixel Convolution (子像素卷积)

    参考:https://blog.csdn.net/leviopku/article/details/84975282 参考:https://blog.csdn.net/g11d111/article/ ...

  6. Speech Super Resolution Generative Adversarial Network

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/10874993.html 论文作者:Sefik Emre Eskimez , Kazuhito K ...

  7. AI:IPPR的数学表示-CNN稀疏结构进化(Mobile、xception、Shuffle、SE、Dilated、Deformable)

    接上一篇:AI:IPPR的数学表示-CNN基础结构进化(Alex.ZF.Inception.Res.InceptionRes). 抄自于各个博客,有大量修改,如有疑问,请移步各个原文.....  前言 ...

  8. Spark Shuffle原理、Shuffle操作问题解决和参数调优

    摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...

  9. Collections.shuffle

    1.Collections.shuffler 最近有个需求是生成十万级至百万级的所有随机数,最简单的思路是一个个生成,生成新的时候排重,但是这样时间复杂度是o(n^2),网上看了几个博客的解决方法都不 ...

随机推荐

  1. bzoj1798

    题解: 同洛谷2023 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ll p,v,su ...

  2. 平面图转对偶图&19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

  3. Oracle 12c Sharding测试过程中的问题解决

    Sharding测试过程中的问题解决 1. 环境部署 软件的版本需要12.2.0.0.3及以上的版本 在配置GSM的时候报错信息不会很直观的展示出来,这对于安装部署有很大阻碍. 2. 数据导入 Dup ...

  4. 将excel数据分块多线程导入

    参考链接:http://blog.csdn.net/liqi_q/article/details/53032027

  5. 图的关键路径,AOE,完整实现,C++描述

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. redis、memcached、mongoDB 对比

    Mongodb和Memcached不是一个范畴内的东西.Mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.Mongodb 和 Memcached不存在谁替换谁的问题. ...

  7. urllib python3 请求、登录、下载网页

    urllib.request 发送request和获取request的结果 urllib.error包含了urllib.request产生的异常 urllib.parse用来解析和处理Url urll ...

  8. python基础初识介绍以及安装

    python介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承. ...

  9. python 26个技巧

    26个你不知道的Python技巧   Python是目前世界上最流行的编程语言之一.因为: 1.它容易学习 2.它用途超广 3.它有非常多的开源支持(大量的模块和库) 不好意思,优达菌又啰嗦了. 本文 ...

  10. strcmp,stricmp

    strcmp,stricmp:原型:int strcmp(const void *s1, const void *s2);功能:比较字符串s1和s2是否相同,区分大小写. 说明:如果s1=s2则返回零 ...