106AC - Minimization

ABC101-C (300 points)
問題

長さ  N の数列 A = \{A_1, A_2, ..., A_N \} がある. ただし  A 1, 2, \ldots, N を並び替えたもの.

  •  K 個の連続した要素を選び, 選んだ要素それぞれの値を, 選んだ要素の中の最小値で置き換える.

という操作を繰り返して, 数列の要素を全て等しくするとき, 必要な操作の回数の最小値を求める.

  •  2 \leq K \leq N \leq 10^5
方針
  •  1 をを含む区間を選択するとき, その区間の数は必ず 1 に置き換えられる→数列の最終型は全て 1 の数列.
  • 一回の操作で  K - 1 個の要素を  1 にできる.
  • 初期状態で  1 でない要素は  N - 1 個.
  • 貪欲に区間を選んでいくとして, 必要な操作の回数は \lceil (N - 1) / (K - 1) \rceil
  • 配列の中身はどうでもいい (!?
import math
 
# input
N, K = map(int, input().split())
A = list(map(int, input().split()))
 
ans = math.ceil((N - 1) / (K - 1))
 
print(ans)