일본식 퍼즐

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

요약
n×n 격자에 k종류 그림 개수가 주어질 때, 그림들을 재배열해서 서로 같은 행을 최대 몇 개까지 만들 수 있는지 구합니다.
난이도

보통10점 중 6점

유형
이분 탐색, 수학, 그리디
정답자
아직 제출이 없습니다

문제

동양에서 완전히 새로운 퍼즐이 등장하여, 세계적으로 유명한 스도쿠에 도전하고 국제적인 인기를 얻으려 하고 있다. 정확한 규칙은 아직 비밀이지만, 목표는 이미 공개되었다. n×nn \times n 크기의 정사각형 격자가 주어지며, 각 칸에는 kk가지 그림 중 하나가 그려진 블록이 놓여 있다. 플레이어는 블록을 재배치하여 서로 같아지는 행의 수를 최대한 많게 만들어야 한다. 두 행은 같은 그림이 같은 순서로 놓여 있을 때 서로 같다고 본다.

재배치는 이미 있는 블록을 옮기기만 할 뿐, 그림 전체의 모음은 변하지 않는다. 즉, 어떤 그림도 새로 추가되거나 제거되지 않는다.

앤디는 퍼즐 리뷰 잡지에서 일하며 이 소식에 흥미를 느꼈다. 그는 지금까지 알려진 정보만으로도 최적의 배치에서 서로 같게 만들 수 있는 행의 수를 알아낼 수 있다는 것을 깨달았고, 임의의 초기 배치에 대해 이 수를 계산하는 프로그램을 작성하려 한다.

예를 들어, 다음과 같이 시작하는 퍼즐이

여러 개의 위쪽 행이 반복되도록 아래처럼 재배치될 수 있다.

입력

첫째 줄에 두 정수 nn과 kk가 주어진다 (1≤n≤400001 \le n \le 40000, 1≤k≤500001 \le k \le 50000). 다음 kk개의 줄에는 각각 하나의 정수 lil_i가 주어지며 (li>0l_i > 0), 이는 ii번째 종류의 그림이 그려진 블록의 개수이다. ∑i=1kli=n2\sum_{i=1}^{k} l_i = n^2임이 보장된다.

출력

서로 같게 만들 수 있는 행의 최대 개수를 정수 하나로 출력한다.

예제3

  1. 예제 1

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

    입력
    1 1
    1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    3 2
    5
    4
    
    예상 출력
    2