아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

행렬 연산

시간 제한2초메모리 제한512 MB

요약
N x N 행렬에 쓰기, 복사, 행/열 교환, 회전, 반사 연산을 순서대로 적용한 뒤 마지막 행렬의 일부 영역으로 해시 값을 계산한다.
난이도

보통10점 중 7점

유형
구현, 행렬, 시뮬레이션, 수학
정답자
아직 제출이 없습니다

문제

당신은 취업 준비생이다. 오늘 IT 기업의 입사 시험을 봤다. 시험에서는 여러 연산을 효율적으로 수행하는 프로그램을 작성하라는 요구를 받았다. 먼저 N×NN \times N 정사각 행렬과 연산 목록이 주어진다. 한 가지를 제외한 모든 연산은 행렬을 변경하고, 마지막 연산은 지정된 칸의 문자를 출력한다. 모든 연산을 마친 뒤의 최종 행렬을 출력해야 한다는 점을 기억하자.

연산의 세부 사항은 다음과 같다.

  • WR r c v: (Write 연산) 칸 (r,c)에 정수 v를 쓴다 (1≤v≤1,000,0001 \leq v \leq 1,000,000)
  • CP r1 c1 r2 c2: (Copy 연산) 칸 (r1,c1)의 문자를 칸 (r2,c2)로 복사한다
  • SR r1 r2: (Swap Row 연산) r1번째 행과 r2번째 행을 교환한다
  • SC c1 c2: (Swap Column 연산) c1번째 열과 c2번째 열을 교환한다
  • RL: (Rotate Left 연산) 전체 행렬을 반시계 방향으로 90도 회전한다
  • RR: (Rotate Right 연산) 전체 행렬을 시계 방향으로 90도 회전한다
  • RH: (Reflect Horizontal 연산) 행의 순서를 뒤집는다
  • RV: (Reflect Vertical 연산) 열의 순서를 뒤집는다

입력

각 테스트케이스의 첫째 줄에는 정수 아홉 개가 주어진다. 이 줄의 처음 두 정수 N과 Q는 각각 행렬의 크기와 쿼리의 수를 나타낸다 (1≤N,Q≤40,000)(1 \leq N,Q \leq 40,000). 다음 세 정수 A, B, C는 초기 행렬의 값을 계산하는 계수이며 (1≤A,B,C≤1,000,000)(1 \leq A,B,C \leq 1,000,000), 다음과 같이 사용된다: Ar,c=(r∗A+c∗B) mod CA_{r,c} = (r * A + c * B) \bmod C. 여기서 r과 c는 각각 행과 열의 인덱스이다 (1≤r,c≤N)(1\leq r,c\leq N). 마지막 네 정수 D, E, F, G는 다음 절에서 언급하는 최종 해시 값을 계산하는 계수이다 (1≤D≤E≤N,1≤F≤G≤N,E−D≤1,000,G−F≤1,000)(1 \leq D \leq E \leq N, 1 \leq F \leq G \leq N, E - D \leq 1,000, G - F \leq 1,000). 다음 Q개 줄에는 각각 위에서 설명한 형식의 연산이 하나씩 주어진다.

출력

다음 의사 코드로 최종 행렬 B에서 계산한 해시 값 h를 출력한다.

h <- 314159265
for r = D...E
  for c = F...G
    h <- (31 * h + B_{r,c}) mod 1,000,000,007

여기서 "<-"는 파괴적 대입 연산자이고, "for i = S...T"는 i가 S부터 T까지(양 끝 포함) 반복되는 루프를 나타내며, "mod"는 나머지 연산이다.

예제4

  1. 예제 1

    입력
    2 1 3 6 12 1 2 1 2
    WR 1 1 1
    
    예상 출력
    676573821
    
  2. 예제 2

    입력
    2 1 3 6 12 1 2 1 2
    RL
    
    예상 출력
    676636559
    
  3. 예제 3

    입력
    2 1 3 6 12 1 2 1 2
    RH
    
    예상 출력
    676547189
    
  4. 예제 4

    입력
    39989 6 999983 999979 999961 1 1000 1 1000
    SR 1 39989
    SC 1 39989
    RL
    RH
    RR
    RV
    
    예상 출력
    458797120