ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1458C. Latin Square

2020-12-20 13:37:27  阅读:214  来源: 互联网

标签:Latin 取逆 int 置换 矩阵 CF1458C Square freopen include


一个矩阵,每行、每列都是个排列(置换)。

支持以下操作:总体上下左右位移,每行或列分别取逆置换。

输出一堆操作之后的矩阵。

\(n\le 1000,m\le 10^5\)


一直在想抽象代数,于是一直没有切。

正解比较简单:可以把原矩阵映射到三维空间中:\((i,j,a_{i,j})\)。取逆置换相当于将两维交换。

于是维护下\((0,0,0)\)经过一系列操作之后变成什么,并且维护最后矩阵中的每一维在一开始是哪一维,于是就可以求出对于任意点\((x,y,z)\)在操作之后移到了哪里。


using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 1005
int n,m;
int a[N][N],b[N][N];
struct vec{
	int x[3];
	void clear(){x[0]=x[1]=x[2]=0;}
	int &operator[](int i){return x[i];}
} o;
int r[3];
char op[100005];
int main(){
//	freopen("in.txt","r",stdin);
//	freopen("out.txt","w",stdout);
	int T;
	scanf("%d",&T);
	while (T--){	
		scanf("%d%d",&n,&m);
		for (int i=0;i<n;++i)
			for (int j=0;j<n;++j)
				scanf("%d",&a[i][j]),a[i][j]--;
		o.clear();
		for (int i=0;i<3;++i)
			r[i]=i;
		scanf("%s",op);
		for (int i=0;i<m;++i){
			if (op[i]=='R')
				o[1]=(o[1]+1)%n;
			else if (op[i]=='L')
				o[1]=(o[1]-1+n)%n;
			else if (op[i]=='D')
				o[0]=(o[0]+1)%n;
			else if (op[i]=='U')
				o[0]=(o[0]-1+n)%n;
			else if (op[i]=='I')
				swap(o[1],o[2]),swap(r[1],r[2]);
			else
				swap(o[0],o[2]),swap(r[0],r[2]);
		}
		for (int i=0;i<n;++i)
			for (int j=0;j<n;++j){
				vec v={i,j,a[i][j]},u;
				for (int i=0;i<3;++i)
					u[i]=(o[i]+v[r[i]])%n;
				b[u[0]][u[1]]=u[2];
//				printf("(%d,%d,%d)\n",u[0],u[1],u[2]);
			}
		for (int i=0;i<n;++i,printf("\n"))
			for (int j=0;j<n;++j)
				printf("%d ",b[i][j]+1);
		printf("\n");
	}
	return 0;
}

标签:Latin,取逆,int,置换,矩阵,CF1458C,Square,freopen,include
来源: https://www.cnblogs.com/jz-597/p/14163295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有