Double Up 2

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

요약
각 원소를 원하는 만큼 두 배 해 M으로 나눈 나머지로 바꿀 때, 가장 많이 등장하는 값의 최대 횟수와 그때 필요한 최소 연산 횟수를 구한다.
난이도

어려움10점 중 8점

유형
정수론, 해시맵, 수학, 그리디
정답자
아직 제출이 없습니다

문제

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

  • 1≤i≤N1 \le i \le N을 만족하는 ii를 고른다. A_iA\_i를 (A_i×2) mod M\left( A\_i \times 2 \right) \bmod{M}으로 교체한다.

달구가 모든 작업을 수행한 뒤, 배열에서 가장 많이 등장하는 수를 kk라 하자. kk의 등장 횟수로 가능한 최댓값을 구하고, 그러한 배열 상태를 만들기 위해 진행해야 하는 연산의 최소 횟수를 구하라.

입력

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

둘째 줄에 NN개의 정수 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (0≤A_i<M)(0 \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