zoukankan      html  css  js  c++  java
  • [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=''){
    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],'
    ');
    60         }
    61     }
    62     return 0;
    63 }
    View Code
  • 相关阅读:
    编译安装centos6.9 php7.0 mysql5.6 nginx1.8
    mysql小细节随笔
    mpdf中文开发使用文档附demo实例
    svn和NetBeans一起使用造成svn老是死锁, database is locked
    Mastering MariaDB 神秘的MariaDB 中文翻译版
    Laravel开发采坑系列问题
    phpspider php爬虫框架
    ajaxFileUpload只能上传一次,和上传同名图片不能上传等bug问题
    bootstrap-treeview 中文开发手册
    phpredis Redis阵列 Redis Arrays
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/15395265.html
Copyright © 2011-2022 走看看