首页 > 其他分享 >CF1458C Latin Square

CF1458C Latin Square

时间:2022-10-25 22:26:40浏览次数:107  
标签:Latin int bmod tag ++ CF1458C Square MAXN scanf

对于一个排列 \(p_i\) ,将其表示为 \((i,p_i)\) , 那么它的逆排列可表示为 \((p_i,i)\)

这道题 \(i,j,a_{i,j}\) 均为排列,考虑用三元组 \((i,j,a_{i,j})\) 表示。(为了方便下标从 \(0\) 开始)

那么操作可表示为:

  • R \((i,j,k) \to (i,(j+1)\bmod n,k)\)
  • L \((i,j,k) \to (i,(j-1)\bmod n,k)\)
  • D \((i,j,k) \to ((i+1)\bmod n,j,k)\)
  • U \((i,j,k) \to ((i-1)\bmod n,j,k)\)
  • I \((i,j,k) \to (i,k,j)\)
  • C \((i,j,k) \to (k,j,i)\)

只需要记录每一维的偏移量与最终的位置即可。

时间复杂度 \(\mathcal O(n^2+m)\)。

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1000 , MAXM = 1e5;
int T , n , m , a[ MAXN + 5 ][ MAXN + 5 ][ 3 ] , b[ MAXN + 5 ][ MAXN + 5 ];
char op[ MAXM + 5 ];

int tag[ 3 ] , p[ 3 ];
int main( ) {
    scanf("%d",&T);
    while( T -- ) {
        scanf("%d %d",&n,&m);
        for( int i = 0 ; i < n ; i ++ )
            for( int j = 0 ; j < n ; j ++ ) {
                a[ i ][ j ][ 0 ] = i, a[ i ][ j ][ 1 ] = j;
                scanf("%d",&a[ i ][ j ][ 2 ]); a[ i ][ j ][ 2 ] --;
            }

        scanf("%s", op + 1 );
        for( int i = 0 ; i < 3 ; i ++ ) p[ i ] = i , tag[ i ] = 0;
        for( int i = 1 ; i <= m ; i ++ ) {
            if( op[ i ] == 'R' ) tag[ p[ 1 ] ] ++;
            if( op[ i ] == 'L' ) tag[ p[ 1 ] ] --;
            if( op[ i ] == 'D' ) tag[ p[ 0 ] ] ++;
            if( op[ i ] == 'U' ) tag[ p[ 0 ] ] --;
            if( op[ i ] == 'I' ) swap( p[ 1 ] , p[ 2 ] );
            if( op[ i ] == 'C' ) swap( p[ 0 ] , p[ 2 ] );
        } 
        for( int i = 0 ; i < 3 ; i ++ ) tag[ i ] = ( tag[ i ] % n + n ) % n;
        for( int i = 0 ; i < n ; i ++ )
            for( int j = 0 ; j < n ; j ++ )
                b[ ( a[ i ][ j ][ p[ 0 ] ] + tag[ 0 ] ) % n ][ ( a[ i ][ j ][ p[ 1 ] ] + tag[ 1 ] ) % n ] = ( a[ i ][ j ][ p[ 2 ] ] + tag[ 2 ] ) % n;
        for( int i = 0 ; i < n ; i ++ )
            for( int j = 0 ; j < n ; j ++ )
                printf("%d%c", b[ i ][ j ] + 1 , j == n - 1 ? '\n' : ' ' );
    }
    return 0;
}

标签:Latin,int,bmod,tag,++,CF1458C,Square,MAXN,scanf
From: https://www.cnblogs.com/chihik/p/CF1458C.html

相关文章

  • 2019-2020 ACM-ICPC Latin American Regional Programming Contest F
    https://codeforces.com/gym/102428首先,令\(dp[i][j]\)表示最下层的有\(i\)块,包括最下层总共还有\(j\)块的方案数容易想到状态方程:$dp[i][j]=\sum_{k=1}^i......
  • lvgl squareline 界面功能解释
    1、状态 2、事件3、动画添加属性属性是动画的属性。但是,并非每个属性都可以在所有小部件中使用。PositionX -在X轴上移动。位置Y -在Y轴上移动。宽......
  • leet Code 977. Squares of a Sorted Array_network
    [977.SquaresofaSortedArray][(https://leetcode.cn/problems/squares-of-a-sorted-array/)暴力解法对数组中每个元素平方后再排序代码如下:classSolution......
  • CF895C Square Subsets
    CF895CSquareSubsets注意到平方数要求每个质因数的幂次均为偶数。由于\(70\)以内仅有\(19\)个质因数,考虑将每个\(a_i\)按照每个质因数的奇偶性分解为\(01\)串......
  • AT2371 [AGC013E] Placing Squares
    AT2371[AGC013E]PlacingSquares设\(f_i\)表示考虑到第\(i\)个点的贡献之和且不考虑坏点。不难发现转移方程为\(f_n=\sum_{i=0}^nf_i\times(n-i)^2\)则当第\(n......
  • On the usage of Google Analytics: are you violating the GDPR?
    OntheusageofGoogleAnalytics:areyouviolatingtheGDPR?InFebruary2022,theFrenchdataprotectionauthority,theCNIL,incooperationwithitsEuropea......
  • [USACO3.2]魔板 Magic Squares
    一道简单的bfs题目,关键是怎么表示状态。康托展开适用于全排列,比如一个排列1324,我们要求出它是排第几地排列第一位:第一位比1小的排列都比这个排列小,但是没有ans+=03!......
  • Root mean square(RMS)均方根在电学上的应用
    前言Rootmeansquare(RMS)中文名也叫均方根。在物理上经常用某一个数学公式来带入实际物理意义,我们来分析下RMS有什么物理应用在里面。正文数学定义均方根常见的定义一......
  • 「AGC036F」Square Constraints 题解
    「AGC036F」SquareConstraints题解题目大意给定一个整数$n$,求有多少种$0\-\2n!-!1$的排列$P$,使得对于每个$i$,都有$n^2\lei^2+P_i^2\le4n^2$。......
  • CF1715F Crop Squares 题解
    CF1715FCropSquaressolution有一个\(n\timesm\)的长方形,四个角的坐标分别为$(0,0)$,$(0,m)$,$(n,0)$,$(n,m)$。在长方形里面有一个\(1\time......