문제 5030 · 메가 V
창고의 공통 묶음 단위
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 물류 창고에는 출고를 기다리는 상자 N개가 있다. 각 상자에는 같은 종류의 부품이 양의 정수 개수만큼 들어 있다. 상자는 입력 순서대로 1번부터 N번까지 구별되며, 부품 수가 같더라도 서로 다른 상자이다. 창고 관리자는 이번 작업에 사용할 상자를 정확히 K개 골라 자동 포장 장치에 올리려 한다. 포장 장치는 선택한 모든 상자에 하나의 공통 묶음 단위 d를 적용한다. d는 양의 정수이며, 각 상자의 부품을 정확히 d개씩 나누어 묶었을 때 남는 부품이 없어야 한다. 상자마다 만들어지는 묶음 수는 달라도 된다. 다만 서로 다른 상자의 부품을 합치거나, 일부 부품을 빼거나, 한 상자에 여러 묶음 단위를 적용하는 일은 허용되지 않는다. 선택하지 않은 상자는 이번 작업의 조건에 아무런 영향을 주지 않는다. 관리자는 한 묶음에 가능한 한 많은 부품을 넣으려 한다. 따라서 정확히 K개의 상자를 선택하는 방법과 그 상자들에 적용할 공통 묶음 단위를 함께 고려하여, 가능한 d의 최댓값 D를 구해야 한다. 양의 정수 개수의 부품은 항상 1개씩 묶을 수 있으므로, 주어진 조건에서는 가능한 묶음 단위가 반드시 존재한다. 최대 묶음 단위만으로는 작업 계획을 고를 수 없으므로, D를 적용할 수 있는 상자 선택 방법의 수도 필요하다. 여기서 하나의 선택 방법은 서로 다른 상자 번호 K개로 이루어진 집합이다. 상자를 고르는 순서는 구별하지 않으며, 선택한 상자 중 하나라도 번호가 다르면 다른 방법으로 센다. 상자 안에서 부품을 묶는 순서나 각 묶음의 배치는 세지 않는다. 특히 부품 수가 같은 상자가 여러 개 있어도 각 상자의 번호는 별개로 취급한다. 가능한 최대 묶음 단위 D와, 그 단위를 적용할 수 있는 선택 방법의 수를 구한다. 방법의 수는 매우 클 수 있으므로 1,000,000,007로 나눈 나머지를 출력한다.
입력
첫째 줄에 정수 N과 K가 공백으로 주어진다. 1 ≤ K ≤ N ≤ 50,000이다. 둘째 줄에 각 상자의 부품 수 A1, A2, ..., AN이 공백으로 주어진다. 모든 Ai는 정수이며 1 ≤ Ai ≤ 200,000이다.
출력
첫째 줄에 가능한 공통 묶음 단위의 최댓값 D를 출력한다. 둘째 줄에 D를 적용할 수 있는 상자 선택 방법의 수를 1,000,000,007로 나눈 나머지를 출력한다.
예제 입력 1
6 3 6 10 15 30 30 18
예제 출력 1
15 1
예제 입력 2
5 3 12 12 24 24 36
예제 출력 2
12 10
예제 입력 3
4 1 7 20 20 3
예제 출력 3
20 2
힌트 펼치기
- 각 정수 d에 대해, 부품 수가 d의 배수인 상자가 몇 개인지 계산한다.
- d를 적용할 수 있는 상자가 C개라면, 그중 정확히 K개를 선택하는 방법의 수를 생각한다.
관련 서재 장
알고리즘 분류
정수론약수조합풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |