곱셈으로 해시 주소 구하기


답안 제출

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

문제 유형

해시 테이블의 크기가 \(M\)일 때, 다음과 같은 곱셈법 해시 함수를 사용하려고 한다.

\(h(x)=\lfloor M(xA\bmod 1)\rfloor\)

여기서 \(xA\bmod 1\)은 \(xA\)의 소수 부분을 의미한다.

이 문제에서 모든 실수 계산은 64비트 배정밀도 부동소수점 자료형인 double을 사용한다. 수학적으로 정확한 실숫값이 아니라 double 자료형으로 계산된 값을 기준으로 한다.

각 데이터의 해시 주소는 다음 과정으로 구한다.

  1. double 자료형으로 \(xA\)를 계산한다.
  2. \(xA\)에서 정수 부분을 빼 소수 부분을 구한다.
  3. 소수 부분에 \(M\)을 곱한 뒤 정수 부분만 취한다.

\(N\)개의 정수 \(x\)가 주어질 때, 각 정수의 해시 주소를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 데이터의 개수 \(N\), 해시 테이블의 크기 \(M\), 곱할 수 \(A\)가 공백으로 구분되어 주어진다.

둘째 줄에 \(N\)개의 정수 \(x_1,x_2,\dots,x_N\)이 공백으로 구분되어 주어진다.

출력

각 데이터의 해시 주소를 입력된 순서대로 공백으로 구분하여 출력한다.

제한 사항

  • \(1 \le N \le 100,000\)
  • \(1 \le M \le 100,000\)
  • \(1 \le x_i \le 1,000,000,000\)
  • \(0<A<1\)

예제 입력 1

4 16 0.375
2 7 10 15

예제 출력 1

12 10 12 10

코멘트

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