만드는 중입니다

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

Double Up 2

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

요약
배열의 각 원소에 2를 곱한 뒤 M으로 나눈 나머지를 취하는 연산을 반복할 때, 같은 값이 가장 많이 나오는 개수와 그 상태에 드는 최소 연산 횟수를 구합니다.
난이도

보통10점 중 7점

유형
그래프, 동적 계획법, 정수론, 해시맵
정답자
아직 제출이 없습니다

문제

NN개의 정수로 이루어진 배열 AA와 정수 MM이 주어진다. 달구는 이 배열에 다음 작업을 원하는 만큼 수행할 수 있다.

  • 1≤i≤N1 \le i \le N을 만족하는 ii를 고른다. AiA_i를 (Ai×2) mod M(A_i \times 2) \bmod M으로 바꾼다.

달구가 모든 작업을 마친 뒤, 배열에서 가장 많이 등장하는 수를 kk라 하자. kk가 나올 수 있는 최대 등장 횟수를 구하고, 그러한 배열 상태를 만드는 데 필요한 연산의 최소 횟수를 구하라.

입력

첫째 줄에 NN과 MM이 공백으로 구분되어 주어진다. (1≤N,M≤1 000 0001 \le N, M \le 1\,000\,000)

둘째 줄에 정수 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N이 공백으로 구분되어 주어진다. (0≤Ai<M0 \le A_i < M)

출력

작업을 원하는 만큼 수행한 뒤, 배열에서 가장 많이 등장하는 수의 가능한 최대 등장 횟수와 그런 배열을 만들기 위해 진행해야 하는 연산의 최소 횟수를 공백으로 구분하여 출력한다.

예제2

  1. 예제 1

    입력
    4 7
    4 1 1 5
    
    예상 출력
    3 1
    
  2. 예제 2

    입력
    20 10
    2 7 9 5 0 2 8 8 4 1 9 7 1 6 9 3 9 9 3 7
    
    예상 출력
    18 33