금고
시간 제한1초메모리 제한1024 MB
두 수의 오른쪽에 숫자를 붙이고 뒤에서 여러 자리를 지우는 연산이 주어지며, 각 질의마다 두 수 합의 p번째 자리 숫자를 구합니다.
문제
고고학자들이 옛 선박에서 금고를 발견했다. 이 금고의 디지털 자물쇠 화면에는 길이가 같은 정수 두 개가 표시되며, 그 수는 가끔씩 바뀐다. 화면의 변화는 세 가지 종류다.
- 두 수 각각의 오른쪽에 숫자 하나가 붙는다.
- 두 수의 오른쪽에서 몇 개의 숫자가 사라진다.
- 화면에 세 번째 수가 나타나고, 그 옆에 한 자리 숫자를 넣는 입력 칸이 생긴다.
연구자들은 두 큰 수의 합에서 세 번째 수가 가리키는 위치의 숫자를 입력하면 금고가 열린다고 가설을 세웠다. 숫자가 손으로 계산하기에는 너무 빨리 바뀌므로, 이 질문에 답하는 프로그램이 필요하다.
이 프로그램의 주요 구성 요소는 금고 화면에서 일어나는 사건에 반응하는 라이브러리다. 아래 함수들은 전체 번 호출된다.
테스트 환경에는 필요한 함수들이 이미 선언된 예제 파일이 제공되므로, 풀이에서는 함수의 구현만 작성하면 된다. 풀이 파일에 자신만의 함수를 추가해도 된다. 언어는 C++이고 풀이 파일 이름은 seif.cpp다. 자신의 컴퓨터에서 컴파일하고 테스트하려면 다음 명령을 사용한다.
g++ -o main main.cpp seif.cpp
./main
로컬 테스트를 위해 채점 프로그램의 예제도 제공된다. 서버에서는 풀이가 반환한 답의 정확성까지 확인하는 다른 채점 프로그램이 쓰인다.
입력
입력 파일의 첫 줄에는 라이브러리 함수 호출 횟수 ()이 주어진다. 이어지는 개의 줄에는 각각 다음 형식 중 하나로 호출이 하나씩 적혀 있다.
1 F S(, )는Add(f, s)호출이다.2 K()는Del(k)호출이다.3 P()는Get(p)호출이다.
출력
출력 파일에는 채점 프로그램과 라이브러리가 주고받은 상호작용의 로그가 기록된다.