해시 테이블 명령 처리


답안 제출

Points: 1
시간 제한: 2.0s
메모리 제한: 1G

문제 유형

크기가 \(M\)인 해시 테이블에 명령을 수행하려고 한다. 데이터 \(x\)의 최초 해시 주소는 다음과 같다.

\(h(x)=x\bmod M\)

데이터를 삽입하거나 찾을 때는 선형 조사 방식으로 다음 위치들을 차례로 확인한다.

\(h_i(x)=(h(x)+i)\bmod M\) \((i=0,1,2,\dots,M-1)\)

사용할 수 있는 명령은 다음과 같다.

  • add x: \(h_0(x)\)부터 차례대로 확인하여 처음 발견한 빈 위치에 \(x\)를 저장한다.
  • remove x: \(h_0(x)\)부터 최대 \(M\)개의 위치를 확인한다. 처음 발견한 \(x\)를 삭제하여 그 위치를 빈칸으로 만든다. \(x\)가 없다면 아무 일도 일어나지 않는다.
  • find x: \(h_0(x)\)부터 최대 \(M\)개의 위치를 확인한다. 처음 발견한 \(x\)의 인덱스를 출력하며, \(x\)가 없다면 -1을 출력한다.

삭제로 생긴 빈 위치가 있더라도 removefind는 그 위치에서 탐색을 멈추지 않고 최대 \(M\)개의 위치를 확인한다.

\(N\)개의 명령을 순서대로 처리하는 프로그램을 작성하시오.

입력

첫째 줄에 명령의 개수 \(N\)과 해시 테이블의 크기 \(M\)이 공백으로 구분되어 주어진다.

둘째 줄부터 \(N\)개의 줄에 걸쳐 명령과 정수 \(x\)가 공백으로 구분되어 주어진다.

출력

find 명령의 결과를 명령이 주어진 순서대로 공백으로 구분하여 출력한다.

제한 사항

  • \(1 \le N,M \le 1,000\)
  • \(1 \le x \le 2^{31}-1\)
  • add x에서 \(x\)는 현재 해시 테이블에 저장되어 있지 않다.
  • add 명령이 주어질 때 해시 테이블에는 빈 위치가 하나 이상 존재한다.
  • find 명령이 한 번 이상 주어진다.

예제 입력 1

12 7
add 2
add 9
add 16
find 9
remove 2
find 16
find 2
add 23
find 23
remove 100
find 9
find 100

예제 출력 1

3 4 -1 2 3 -1

코멘트

현재 작성된 코멘트가 없습니다.