Max or Min
시간 제한1초메모리 제한256 MB
원 위에 놓인 수들에 대해 어떤 수와 양쪽 이웃을 min 또는 max로 바꾸는 연산을 할 때, 각 x에 대해 모든 수를 x로 만드는 최소 시간을 구하거나 불가능하면 -1을 출력한다.
문제
Kevin은 개의 정수 을 원형으로 배치했다. 즉, 와 ()은 이웃이고, 과 도 이웃이다. 따라서 각 수는 정확히 두 개의 이웃을 가진다.
Kevin은 1분 동안 를 와 그 두 이웃, 이렇게 세 수 중 최솟값으로 바꿀 수 있다. 또는 같은 세 수 중 최댓값으로 바꿀 수도 있다. 예를 들어 이고 두 이웃이 3과 2일 때, 최솟값 연산을 하면 는 2가 된다. 하지만 최댓값 연산을 하면 는 5로 그대로 남는다.
각 ()에 대해, 모든 수를 로 만드는 데 필요한 최소 시간(분)을 구하거나, 불가능하다면 불가능함을 판별하라.
입력
첫째 줄에 두 정수 과 이 주어진다 (, ). 은 원에 있는 정수의 개수이고, 은 답을 구해야 하는 정수의 개수이다.
둘째 줄에 개의 정수 이 주어진다 ().
출력
개의 정수를 출력한다. 번째 정수는 모든 수를 로 만드는 데 필요한 최소 시간(분)이며, 불가능하면 이다.
힌트
모든 수를 2로 만들려면 Kevin은 최소 5분이 필요하다. 가능한 연산 순서 중 하나는 다음과 같다.
- 에 최솟값 연산을 한다. 은 2가 된다.
- 에 최댓값 연산을 한다. 는 2가 된다.
- 에 최댓값 연산을 한다. 은 5가 된다.
- 에 최솟값 연산을 한다. 는 2가 된다.
- 에 최솟값 연산을 한다. 은 2가 된다.