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

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

암호화 행렬

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

요약
세 개의 N x N 행렬이 주어질 때 XY = Z를 만족하는 순열마다 각 행렬에 평문, 암호화 행렬, 암호문 특성을 표시하고, 각 행렬의 비트 점수를 출력한다.
난이도

보통10점 중 4점

유형
행렬, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

N×NN \times N 행렬 세 개 A_0, A_1, A_2A\_0,\ A\_1,\ A\_2가 주어진다.

집합 A=A_0, A_1, A_2A = \\{A\_0,\ A\_1,\ A\_2\\}라 하면, 이 집합에 포함된 세 행렬의 어떤 순열 XX, YY, ZZ가 XY=ZXY = Z이라는 조건을 만족할 때, 각 행렬은 다음과 같은 특성을 갖는다고 하자.

  • XX: 평문
  • YY: 암호화 행렬
  • ZZ: 암호문

이때 S(A_i∣A)S(A\_i | A)를 집합 AA에 속하는 원소 A_iA\_i의 특성들의 집합이라고 하자. (0≤i≤2)(0 \le i \le 2)

 예를 들어, A_0=(00 01)A\_0 = \left( \begin{matrix} 0 & 0 \\\ 0 & 1 \end{matrix} \right), A_1=(10 00)A\_1 = \left( \begin{matrix} 1 & 0 \\\ 0 & 0 \end{matrix} \right), A_2=(00 00)A\_2 = \left( \begin{matrix} 0 & 0 \\\ 0 & 0 \end{matrix} \right), 그리고 A=A_0, A_1, A_2A = \\{A\_0,\ A\_1,\ A\_2\\} 라고 하자.

이때 A_0A_1=A_2A\_0A\_1 = A\_2, 그리고 A_1A_0=A_2A\_1A\_0 = A\_2 이다.

따라서, S(A_0∣A)=평문,암호화 행렬S(A\_0 | A) = \\{\textbf{평문}, \textbf{암호화 행렬}\\}, S(A_1∣A)=평문,암호화 행렬S(A\_1 | A) = \\{\textbf{평문}, \textbf{암호화 행렬}\\}, S(A_2∣A)=암호문S(A\_2 | A) = \\{\textbf{암호문}\\} 임을 알 수 있다.

이제 f(A_i∣A)f(A\_i | A) (0≤i≤2)(0 \le i \le 2)를 다음과 같이 정의하자. 

f(A\_i | A) = 1 \times \left\[\textbf{평문} \in S(A\_i | A)\right] + 2 \times \left\[\textbf{암호화 행렬} \in S(A\_i | A)\right] + 4 \times \left\[\textbf{암호문} \in S(A\_i | A)\right]

여기서 \[condition]={1if  condition 0otherwise.\[condition] = \begin{cases} 1 & \texttt{if}\ \ condition \\\ 0 & \texttt{otherwise.} \end{cases} 이다.

즉, 위의 예시에서

f(A_0∣A)=(1×1)+(2×1)+(4×0)=3f(A\_0 | A) = (1 \times 1) + (2 \times 1) + (4 \times 0) = 3,

f(A_1∣A)=(1×1)+(2×1)+(4×0)=3f(A\_1 | A) = (1 \times 1) + (2 \times 1) + (4 \times 0) = 3,

f(A_2∣A)=(1×0)+(2×0)+(4×1)=4f(A\_2 | A) = (1 \times 0) + (2 \times 0) + (4 \times 1) = 4 이다.

세 개의 N×NN \times N 행렬 A_0A\_0, A_1A\_1, A_2A\_2가 주어진다. A=A_0, A_1, A_2A = \\{A\_0,\ A\_1,\ A\_2\\}일 때, f(A_0∣A), f(A_1∣A),f(A_2∣A)f(A\_0 | A),\ f(A\_1 | A), f(A\_2 | A)을 구하는 프로그램을 작성하시오.

입력

첫 줄에는 정수 NN이 주어진다. (1≤N≤1,000)(1 \le N \le 1\\,000)

다음 3N3N 줄에 거쳐 세 행렬 A_0A\_0, A_1A\_1, A_2A\_2가 주어진다.

각 줄에는 NN개의 정수가 공백으로 구분되어 주어지며, 각 정수의 절댓값은 200200보다 작거나 같다.

출력

f(A_0∣A)f(A\_0 | A), f(A_1∣A)f(A\_1 | A), f(A_2∣A)f(A\_2 | A)를 한 줄에 하나씩 순서대로 출력한다.

예제3

  1. 예제 1

    입력
    2
    0 0
    0 1
    1 0
    0 0
    0 0
    0 0
    
    예상 출력
    3
    3
    4
    
  2. 예제 2

    입력
    2
    123 -123
    111 -111
    0 0
    0 0
    0 0
    0 0
    
    예상 출력
    3
    7
    7
    
  3. 예제 3

    입력
    3
    0 1 2
    0 0 0
    0 0 0
    0 0 0
    1 0 0
    2 0 0
    5 0 0
    0 0 0
    0 0 0
    
    예상 출력
    1
    2
    4