[cf1458C]Latin Square

维护$n^{2}$个三元组$(x,y,z)$,每一个三元组描述$a_{x,y}=z$

对于RLDU这四个操作,即将所有三元组的$x$或$y$执行$\pm 1$(模$n$意义下)

对于IC这两个操作,即分别将$y$和$z$交换或$x$和$z$交换

维护这三个元素交换的顺序以及每一个元素加减的量,最终再$o(n^{2})$解出即可

时间复杂度为$o(n^{2}+m)$,可以通过

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define N 1005
 4 #define M 100005
 5 int t,n,m,num[11],p[3],d[3],b[3],a[N][N],ans[N][N];
 6 char s[M];
 7 int read(){
 8     int x=0;
 9     char c=getchar();
10     while ((c<'0')||(c>'9'))c=getchar();
11     while ((c>='0')&&(c<='9')){
12         x=x*10+c-'0';
13         c=getchar();
14     }
15     return x;
16 }
17 void write(int x,char c='\0'){
18     while (x){
19         num[++num[0]]=x%10;
20         x/=10;
21     }
22     if (!num[0])putchar('0');
23     while (num[0])putchar(num[num[0]--]+'0');
24     putchar(c);
25 }
26 int main(){
27     t=read();
28     while (t--){
29         n=read(),m=read();
30         for(int i=1;i<=n;i++)
31             for(int j=1;j<=n;j++)a[i][j]=read();
32         scanf("%s",s);
33         //当前第i维为原来第pi维+di 
34         p[0]=0,p[1]=1,p[2]=2,d[0]=d[1]=d[2]=0;
35         for(int i=0;i<m;i++){
36             if (s[i]=='R')d[1]++;
37             if (s[i]=='L')d[1]--;
38             if (s[i]=='D')d[0]++;
39             if (s[i]=='U')d[0]--;
40             if (s[i]=='I'){
41                 swap(p[1],p[2]);
42                 swap(d[1],d[2]);
43             }
44             if (s[i]=='C'){
45                 swap(p[0],p[2]);
46                 swap(d[0],d[2]);
47             }
48         }
49         for(int i=1;i<=n;i++)
50             for(int j=1;j<=n;j++){
51                 b[0]=i,b[1]=j,b[2]=a[i][j];
52                 int x=((b[p[0]]+d[0])%n+n-1)%n+1;
53                 int y=((b[p[1]]+d[1])%n+n-1)%n+1;
54                 int z=((b[p[2]]+d[2])%n+n-1)%n+1;
55                 ans[x][y]=z;
56             }
57         for(int i=1;i<=n;i++){
58             for(int j=1;j<n;j++)write(ans[i][j],' ');
59             write(ans[i][n],'\n');
60         }
61     }
62     return 0;
63 }
View Code

 

posted @ 2021-10-11 22:14  PYWBKTDA  阅读(32)  评论(0编辑  收藏  举报