만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

금고

시간 제한1초메모리 제한1024 MB

요약
두 수의 오른쪽에 숫자를 붙이고 뒤에서 여러 자리를 지우는 연산이 주어지며, 각 질의마다 두 수 합의 p번째 자리 숫자를 구합니다.
난이도

보통10점 중 7점

유형
스택, 수학
정답자
아직 제출이 없습니다

문제

고고학자들이 옛 선박에서 금고를 발견했다. 이 금고의 디지털 자물쇠 화면에는 길이가 같은 정수 두 개가 표시되며, 그 수는 가끔씩 바뀐다. 화면의 변화는 세 가지 종류다.

  • 두 수 각각의 오른쪽에 숫자 하나가 붙는다.
  • 두 수의 오른쪽에서 몇 개의 숫자가 사라진다.
  • 화면에 세 번째 수가 나타나고, 그 옆에 한 자리 숫자를 넣는 입력 칸이 생긴다.

연구자들은 두 큰 수의 합에서 세 번째 수가 가리키는 위치의 숫자를 입력하면 금고가 열린다고 가설을 세웠다. 숫자가 손으로 계산하기에는 너무 빨리 바뀌므로, 이 질문에 답하는 프로그램이 필요하다.

이 프로그램의 주요 구성 요소는 금고 화면에서 일어나는 사건에 반응하는 라이브러리다. 아래 함수들은 전체 NN번 호출된다.

함수설명
void Add(int f, int s)첫 번째 긴 수의 오른쪽에 숫자 f가, 두 번째 긴 수의 오른쪽에 숫자 s가 붙었다.
void Del(int k)두 긴 수의 오른쪽에서 숫자 k개가 사라졌다. 이 함수를 호출하는 시점에 두 큰 수는 적어도 k자리라고 가정해도 된다. 두 수에 숫자가 하나도 남지 않을 수도 있다.
int Get(int p)세 번째 수 p가 화면에 나타났다. 함수는 두 긴 수의 합에서 오른쪽부터 p번째 자리의 숫자를 반환해야 한다. 이 함수를 호출하는 시점에 합은 적어도 p자리라고 가정해도 된다.

테스트 환경에는 필요한 함수들이 이미 선언된 예제 파일이 제공되므로, 풀이에서는 함수의 구현만 작성하면 된다. 풀이 파일에 자신만의 함수를 추가해도 된다. 언어는 C++이고 풀이 파일 이름은 seif.cpp다. 자신의 컴퓨터에서 컴파일하고 테스트하려면 다음 명령을 사용한다.

g++ -o main main.cpp seif.cpp
./main

로컬 테스트를 위해 채점 프로그램의 예제도 제공된다. 서버에서는 풀이가 반환한 답의 정확성까지 확인하는 다른 채점 프로그램이 쓰인다.

입력

입력 파일의 첫 줄에는 라이브러리 함수 호출 횟수 NN(1≤N≤1061 \le N \le 10^6)이 주어진다. 이어지는 NN개의 줄에는 각각 다음 형식 중 하나로 호출이 하나씩 적혀 있다.

  • 1 F S(1≤F≤91 \le F \le 9, 1≤S≤91 \le S \le 9)는 Add(f, s) 호출이다.
  • 2 K(1≤K1 \le K)는 Del(k) 호출이다.
  • 3 P(1≤P1 \le P)는 Get(p) 호출이다.

출력

출력 파일에는 채점 프로그램과 라이브러리가 주고받은 상호작용의 로그가 기록된다.

예제2

  1. 예제 1

    입력
    5
    1 1 1
    3 1
    1 3 9
    3 1
    3 2
    
    예상 출력
    add(1, 1)
    get(1) = 2
    add(3, 9)
    get(1) = 2
    get(2) = 3
    
  2. 예제 2

    입력
    10
    1 1 1
    1 2 2
    1 3 3
    3 1
    3 2
    3 3
    2 2
    1 4 6
    3 1
    3 2
    
    예상 출력
    add(1, 1)
    add(2, 2)
    add(3, 3)
    get(1) = 6
    get(2) = 4
    get(3) = 2
    del(2)
    add(4, 6)
    get(1) = 0
    get(2) = 3