페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#3092

암호놀이 1s 128MB

문제

동구와 정구는 서로 친한 친구이다. 그래서 그 둘은 그들만의 대화를 하기 위해 새로운 암호 체계를 발명하였다.

 

그들의 메시지는 이진수로 표현된다. 그 메시지를 b 라고 하자. 암호화시키는 과정은 다음과 같다. k줄에 걸쳐 b를 쓴다. 단 한줄 한줄 늘어날때마다 왼쪽에서부터 한 칸씩 들여쓰기(shift) 한다. 다 썼으면 그대로 XOR연산한다.

 

예를 들면 1001011라는 메시지를 암호화시키는 과정을 보자. 이때 k=4이다.

 

1001011        //들여쓰기 0칸, 즉 원래의 메시지 b

01001011      //들여쓰기 1칸(편의상 0으로 표현했다. 어차피 xor할거니깐)

001001011    //들여쓰기 2칸

0001001011  //들여쓰기 3칸

 

1110101001 <- XOR되서 암호화된 메시지 s

 

택쌤은 여기까지 읽고 “아 감사합니다. 이렇게 쉬운 문제를 내주시다니요. s를 구하면 되는거죠?” 라고 생각하는 학생들을 실망시키기로 했다. 암호는 암호화시키는 것만큼이나 해독시키는 게 중요한 것 아니겠는가. 암호화된 메시지 s와 k를 주었을 때 원래의 메시지 b를 출력하는 프로그램을 작성하라. 


입력

첫째 줄에 n과 k가 주어진다. n은 원래의 메시지 b의 길이이다. k는 위에 설명되어 있는 그 k이다.

두번째 줄에 암호화된 메시지 s가 2진수로 주어진다.

암호화 과정을 걸쳐서 만들 수 없는 s가 입력으로 주어지는 경우는 없다. 1<=n<=106, 1<=k<=106, s의 길이 = n+k-1


출력

길이 n의 원래의 메시지 b를 출력하라.


예제 #1

7 4

1110100110
1001010

예제 #2

6 2

1110001
101111

출처

2016 Penn State CodePSU contest advanced tier – problem 6, 2018camp contest6 problemC
로그인해야 코드를 작성할 수 있어요.